Fox DB Profile - Overview & Details¶
Fox DB Profile 기능은 FoxDbAccess
클래스 혹은 그 파생 클래스들에 의해 수행되는 쿼리들에 대한 상세한 정보를 기록하는 기능을 말합니다. Fox DB Profile 에 의해 기록되는 쿼리 수행 정보는 SQL 문장, 매개변수 값, 쿼리 수행 시간 등을 포함합니다. Fox DB Profile 을 통해 DB 쿼리들에 대한 상세한 감사 기록을 구성하거나 어떤 쿼리가 앱에서 병목을 일으키는지 손쉽게 알아낼 수 있습니다. 하지만 Fox DB Profile 은 데이터를 수집하고 로그에 기록하는데 오버헤드가 발생하므로 데이터 액세스 성능을 저하시킬 수도 있습니다. 운영 중인 앱이라면 필터링을 적용하여 너무 많은 로그 기록으로 성능 저하가 발생하지 않도록 주의해야 합니다. Fox DB Profile 을 사용함에 있어서 팁과 구체적인 활용 방법은 Fox DB Profile 활용 문서를 참고 하십시요.
이 문서와 관련된 예제 코드는 다음 예제를 참조 하십시요.
Overview¶
Fox DB Profile 은 FoxDbAccess
객체를 통해 수행되는 모든 쿼리에 대해 쿼리 수행 정보를 수집합니다. 수집된 쿼리 정보는 Fox Logging을 통해 로그로 기록됩니다. 어떤 로거를 사용하느냐에 따라 텍스트 파일, DB 등 다양한 매체에 쿼리 수행 정보를 기록할 수 있습니다. 다음은 Fox DB Profile 을 활성화 하는 예제 코드를 보여 줍니다.
FoxDbAccess
클래스의 DbProfileSettings
속성은 Fox DB Profile 설정에 관련된 여러 속성들을 제공합니다. Enable
속성은 Fox Db Profile 기능 활성화 여부를 설정하며 LoggerName
속성은 수집된 쿼리 수행 정보를 기록할 로거 이름을 나타냅니다. 위 예제에서는 콘솔에 로그를 기록하도록 지정하고 있습니다(구체적인 로거 설정은 생략되어 있습니다). Fox DB Profile 설정에 대한 상세한 내용은 FoxDbProfileSettings
클래스를 참조 하십시요.
다음은 위 코드에 의해 콘솔에 출력된 쿼리 수행 정보를 보여줍니다.
Fox DB Profile 이 수집하는 쿼리 수행 정보는 수행된 SQL 문장, DB 매개변수 정보(이름 및 값), 쿼리 수행 시간, 쿼리 수행 결과 등 입니다. Fox DB Profile 이 수집한 정보는 FoxDbProfileInfo
클래스에 기록되며 쿼리 정보를 담은 FoxDbProfileInfo
객체가 로거로 전달되고 기록됩니다. 실제로 위 출력 결과는 FoxDbProfileInfo.ToString()
메서드의 호출 결과 입니다.
FoxDbProfileSettings
클래스 ¶
FoxDbProfileSettings
클래스는 Fox DB Profile 에 관련된 설정을 담는 클래스 입니다. 주요 속성들은 다음과 같습니다.
-
Enabled
속성Fox DB Profile 활성화 여부 입니다. 기본값은
false
입니다. 구성 설정 속성은enable
입니다. -
LoggerName
속성활성화 되었을 때 쿼리 수행 정보(
FoxDbProfileInfo
객체)를 기록할 로거 이름입니다. 기본값은null
입니다. 구성 설정 속성은loggerName
입니다. -
쿼리 수행 시간(msec)에 따라 로기 기록을 필터링 하는 속성 입니다. 이 속성에 설정된 값보다 작은 수행 시간을 가진 쿼리 수행 정보는 로그에 기록되지 않습니다. 예를 들어 수행 시간이 5초 이상인 쿼리만을 로그에 기록하고자 한다면 이 속성에
5000
을 설정하면 됩니다. 디폴트 값인0
을 설정하면 필터링을 수행하지 않습니다. 구성 설정 속성은executionTime
입니다. -
Diagnostics
속성Fox DB Profile 기능에 대한 진단 기능 활성화 여부 입니다. 기본값은
false
입니다. 구성 설정 속성은diagnostics
입니다.쿼리 수행 정보를 기록하는 작업은 기본적으로 성능 저하를 유발할 수 있습니다. Fox DB Profile 기능은 이러한 성능 저하를 최소화 하기 위해 별도의 스레드 풀을 사용하여 비동기적으로 로그를 기록합니다. 이 과정에서 예외가 발생하면 예외는 무시되거나 별도의 로그에 기록됩니다. 이러한 로기 기록의 비동기성은 Fox DB Profile 설정에 발생하는 오류를 파악하기 어렵게 만듭니다. 따라서
Diagnostics
속성을true
로 지정하면 로그 기록은 동기적으로 수행하며 발생하는 예외는 무시되지 않고throw
됩니다.Warning
Diagnostics
속성을true
로 지정하면 Fox DB Profile 기능이 발생하는 오버헤드가 커지게 됩니다. 따라서 Fox DB Profile 설정에 문제가 발생했을 때만true
로 지정하여 문제 원인을 파악해야 하며 일반적인 경우에는false
로 지정해야 합니다.
FoxDbAccess
클래스(및 그 파생 클래스)는 FoxDbProfileSettings
타입의 DbProfileSettings
속성을 통해 FoxDbAccess
객체 수준에서 Fox DB Profile 의 사용 여부 등의 설정을 수행할 수 있습니다.
FoxDatabaseConfig
클래스의 DbProfileSettings
속성은 FoxDbAccess
수준이 아닌 전역 수준에서도 Fox DB Profile 설정을 지정 합니다. FoxDatabaseConfig.DbProfileSettings
속성에 설정된 값들은 FoxDbAccess.DbProfileSettings
속성의 기본값이 됩니다. 예를 들어, FoxDatabaseConfig.DbProfileSettings.Diagnostics
속성을 true
로 지정했다면 이 이후에 생성되는 모든 FoxDbAccess.DbProfilesettings.Diagnostics
속성의 기본값은 true
로 지정됩니다.
Fox DB Profile 설정은 코드 뿐만 아니라 구성 설정을 통해서도 지정이 가능합니다. 상세한 내용은 Fox DB Profile 구성 설정 문서를 참고 하십시요.
FoxDbProfileInfo
클래스 ¶
Fox DB Profile 이 활성화 되면 FoxDbAccess
는 쿼리 수행 정보를 수집하여 FoxDbProfileInfo
객체에 기록하며 이 객체는 로거로 전달되어 쿼리 수행 정보를 기록합니다. FoxDbProfileInfo
객체에 기록되는 쿼리 수행 정보는 다음과 같습니다.
-
InfoId
속성FoxDbProfieInfo
에 대한 고유 아이디로서 GUID 에 기반하기 때문에 데이터베이스에 저장할 때 고유 키로 사용할 수 있습니다.ToString()
결과 문자열에서는ID
로 표시됩니다. -
CommandText
속성수행되는 SQL 문장 혹은 저장 프로시저 이름 입니다.
ToString()
결과 문자열에서는QUERY
로 표시됩니다. -
ParameterInfos
속성쿼리에 사용된 DB 매개변수와 인자값들을
Dictionary<string, string>
객체로 제공합니다. 기록된 DB 매개변수 값들은 모두 문자열화 되어 있습니다.ToString()
결과 문자열에는 표시되지 않습니다. -
QueryString
속성수행되는 SQL 문장에 DB 매개변수 값을 적용한 결과 입니다. 저장 프로시저의 경우 매개변수 값을 적용한 저장 프로시저 호출 식 입니다. 이 속성은 외부 DB 도구에서 쿼리 수행을 재연(reproduce)할 때 도움이 됩니다.
ToString()
결과 문자열에서는INLINE_QUERY
로 표시됩니다.Note
QueryString
이 나타내는 SQL 문장 혹은 저장 프로시 호출 식은FoxDbAccess
에서 데이터베이스별로 일련의 규칙을 적용하여 '구성'되었습니다. 따라서 일부 상황에서는 부정확한 SQL 문장이 생성되어 쿼리 재연이 어려울 수도 있습니다. 또한 일부 데이터베이스에 대해서는 이 속성을 지원하지 않아 항상 빈 문자열이 출력될수도 있습니다. -
ParameterString
속성쿼리에 사용된 매개변수와 값을 단일 문자열로 표시합니다.
ToString()
결과 문자열에서는PARAMETERS
로 표시됩니다. -
ExecutionType
속성쿼리를 수행한
Execute-
메서드 종류를 나타냅니다.ExecuteDataSet
,ExecuteNonQuery
,ExecuteScalar
,ExecuteReader
중 하나의 값을 가지며ToString()
결과 문자열에서는EXECUTION_TYPE
로 표시됩니다. -
ResultString
속성쿼리 수행 결과를 문자열로 표시합니다.
ToString()
결과 문자열에서는RESULT
로 표시됩니다. -
ExecutionTime
속성쿼리가 수행된 시간(msec)을
double
타입으로 나타냅니다. 이 시간은FoxDbAccess
가 쿼리를 수행할 때 측정한 시간이므로 네트워킹에 소요된 시간과 데이터베이스에서 쿼리가 실제 수행된 시간을 포함합니다. 이 값은 Fox DB Profile 의 수행 시간 필터링에서 사용됩니다.ToString()
결과 문자열에서는EXECUTION_TIME
로 표시됩니다. -
DbExceptionInfo
속성쿼리 수행 도중 발생하는 오류, 즉 예외에 대한 정보 입니다. 예외 타입, 오류 코드, 예외 메시지를 포함하며
ToString()
결과 문자열에서는EXCEPTION
으로 표시됩니다. -
UserInfo
속성쿼리 호출 당시 사용자 정보(존재한다면) 입니다.
UserInfo
속성은 사용자 정보를 담는FoxUserInfoContext
객체 입니다.ToString()
결과 문자열에서는 사용자 아이디만을USER_ID
로 표시합니다. -
CallerName
속성FoxDbAccess
를 호출하여 쿼리를 수행한 호출자(caller)를 나타냅니다. 일반적으로 이 속성은 채워지지 않지만 Fox Tranasactions 환경에서FoxDacBase
클래스 혹은 그 파생 클래스에서FoxDbAccess
를 호출한 경우 호출한 클래스/메서드 이름이 자동으로 채워집니다.ToString()
결과 문자열에서는CALLER
로 표시됩니다. -
QueryId
/QueryFileName
속성수행된 쿼리가 FoxQuery 인 경우,
.foxml
파일 경로와 고유한 쿼리 아이디를 나타냅니다.ToString()
결과 문자열에서는FOXQUERY_ID
및FOXQUERY_FILENAME
으로 표시됩니다.
FoxDbProfileInfo
클래스는 JSON 변환에도 매우 친화적입니다. ToJson
메서드를 호출하면 손쉽게 JSON 문자열을 획득할 수 있습니다. 이를 통해 MongoDB 와 같은 문서 기반의 NoSQL 데이터베이스에 쿼리 로그를 기록하기에 용이합니다.
Summary¶
Fox DB Profile은 FoxDbAccess
클래스 또는 그 파생 클래스들이 수행하는 DB 쿼리의 상세 정보를 로깅하는 기능입니다. Fox DB Profile 이 제공하는 정보는 FoxDbProfileInfo
클래스로 표현되며 SQL 문장, 매개변수 이름/값, 쿼리 수행 시간 등이 포함됩니다. Fox DB Profile 기능은 연결 문자열 수준 혹은 전역 수준에서 활성화 될 수 있으며 FoxDbProfileSettings
클래스를 통해 설정을 수행할 수 있습니다.
Fox DB Profile 기능을 통해 성능 병목 분석이나 감사 로그 구성이 가능하지만, 오버헤드로 인해 애플리케이션의 성능 저하를 일으킬 수 있어서 주의가 필요합니다.