Эта статья о возможностях трассировки, мониторинга в FireDAC. Она основана на официальной документации.
Трассировка в FireDAC это детализированный лог коммуникации между FireDAC и БД. Она включает номер, время, API вызовы и множество других параметров, а также DBMS environment report.
FireDAC предлагает 3 метода вывода трассировки, которые контролируются различными компонентами
Первый метод выводит информацию в текстовый файл
Второй метод выводит информацию в FDMonitor
Третий метод выводит информацию в событие.
Управление трассировкой
Чтобы включить трассировку для соединения
-Бросьте на форму TFDMoniXxxxClientLink
-Установите свойство Tracing в True до открытия первого соединения с MonitorBy=Xxx.
-Добавьте MonitorBy=Xxx параметр connection definition
Параметр MonitorBy ассоциирует definition cо специальным методом трассировки и становится read-only после первого соединения, созданного для этого definition.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
FDMoniFlatFileClientLink1.Tracing := True; with FDConnection1.Params do begin Clear; Add('DriverID=SQLite'); Add('Database=c:\test.sdb'); Add('MonitorBy=FlatFile'); end; FDConnection1.Connected := True; ... // disable trace output for connection FDConnection1.ConnectionIntf.Tracing := False; ... // enable trace output for connection FDConnection1.ConnectionIntf.Tracing := True; |
Пример трассировочного контента
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
1385 15:47:14.093 >> Fetch [ATable="FDQA_FK_tab", Command="SELECT AF.fk_id, AF.id, AT1.f1, AT1.f2 FROM FDQA_FK_tab AF LEFT JOIN FDQA_tabwithpk AT1 ON AF.fk_id=AT1.f1"] 1386 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=0, Result=SQLITE_NULL] 1387 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=1, Result=SQLITE_INTEGER] 1388 15:47:14.093 . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=1, AValue^=2] 1389 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=2, Result=SQLITE_NULL] 1390 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=3, Result=SQLITE_NULL] 1391 15:47:14.093 . sqlite3_step [stmt=$0F16E6B8] 1392 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=0, Result=SQLITE_INTEGER] 1393 15:47:14.093 . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=0, AValue^=2] 1394 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=1, Result=SQLITE_INTEGER] 1395 15:47:14.093 . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=1, AValue^=3] 1396 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=2, Result=SQLITE_INTEGER] 1397 15:47:14.093 . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=2, AValue^=2] 1398 15:47:14.093 . sqlite3_column_type [stmt=$0F16E6B8, iCol=3, Result=SQLITE_TEXT] 1399 15:47:14.093 . sqlite3_column_text [stmt=$0F16E6B8, iCol=3, bytes=4] 1400 15:47:14.093 . sqlite3_step [stmt=$0F16E6B8] 1401 15:47:14.093 . profile [SQL="SELECT AF.fk_id, AF.id, AT1.f1, AT1.f2 FROM FDQA_FK_tab AF LEFT JOIN FDQA_tabwithpk AT1 ON AF.fk_id=AT1.f1", time=0] 1402 15:47:14.093 << Fetch [ATable="FDQA_FK_tab", Command="SELECT AF.fk_id, AF.id, AT1.f1, AT1.f2 FROM FDQA_FK_tab AF LEFT JOIN FDQA_tabwithpk AT1 ON AF.fk_id=AT1.f1", RowsAffected=2] |
Управление трассировкой
Flat File Output
TFDMoniFlatFileClientLink выводит трассировочную информацию в текстовый файл, по умолчанию в папку TEMP, файл открывается при закрытии приложения. Свойства компонента, которые можно настроить
- FileName–the trace file name. Environment variables–$(name)–can be used. The default name is $(TEMP)\traceN.txt.
- FileEncoding– кодировка, по умолчанию ANSI.
- FileAppend— добавление файлов
- FileColumns–колонки, включаемый в файл трассировки
Remote Output
Компонент TFDMoniRemoteClientLink выводит информацию в FDMonitor. Чтобы управлять выводом, нужно настроить свойства
- Host–the IP address of the FDMonitor box. Default is localhost.
- Port–the IP port that FDMonitor is listening. Default is 8050.
- Timeout –the maximum number of ms allowed to establish a connection to FDMonitor.
Custom Output
TFDMoniCustomClientLink – компонент, который выводит информацию в событие, для этого нужно настроить событие OnOutput . В данном случае избегайте Application.ProcessMessages