可以使用向下钻取查询(也称为 SQL 跟踪)来收集有关运行的每个 SQL 语句的统计信息以及分析语句历史记录。
统计信息存储在循环缓冲区(内存中名为 syssqltrace 的伪表)中,即存储在 sysmaster 数据库中。您可以动态地调整循环缓冲区的大小。
缺省情况下,SQL 跟踪已关闭,但是您可以对所有用户或一组特定用户打开此功能。在启用具有缺省配置的 SQL 跟踪时,数据库服务器会跟踪运行的上 1000 条 SQL 语句,以及这些语句的概要统计信息。还可以全局禁用 SQL 跟踪或禁用对特定用户的 SQL 跟踪。
如果您计划保存大量历史信息,那么 SQL 跟踪所需的内存相当大。SQL 跟踪所需的缺省空间量为 2 MB。可以根据需求增加或减少存储量。
procedure1() calls procedure2() calls procedure3()
所跟踪的信息量影响该历史数据所需的内存量。
您可以在任何时候启用和禁用跟踪,并可在数据库服务器运行时更改跟踪缓冲区的数目和大小。如果调整跟踪缓冲区的大小,那么数据库服务器将尝试维护缓冲区的内容。如果增大这些参数,数据将不会被截断。但是,如果缓冲区的数目或大小减小,那么跟踪缓冲区中的数据将被截断或丢失。
缓冲区的数目确定了所跟踪的 SQL 语句数。每个缓冲区包含单个 SQL 语句的信息。缺省情况下,各个跟踪缓冲区的大小是固定的。如果缓冲区中存储的文本信息超过跟踪缓冲区的大小,那么数据被截断。
select * from syssqltrace where sql_id = 5678; sql_id 5678 sql_address 4489052648 sql_sid 55 sql_uid 2053 sql_stmttype 6 sql_stmtname INSERT sql_finishtime 1140477805 sql_begintxtime 1140477774 sql_runtime 30.86596333400 sql_pgreads 1285 sql_bfreads 19444 sql_rdcache 93.39127751491 sql_bfidxreads 5359 sql_pgwrites 810 sql_bfwrites 17046 sql_wrcache 95.24815205913 sql_lockreq 10603 sql_lockwaits 0 sql_lockwttime 0.00 sql_logspace 60400 sql_sorttotal 0 sql_sortdisk 0 sql_sortmem 0 sql_executions 1 sql_totaltime 30.86596333400 sql_avgtime 30.86596333400 sql_maxtime 30.86596333400 sql_numiowaits 2080 sql_avgiowaits 0.014054286131 sql_totaliowaits 29.23291515300 sql_rowspersec 169.8958799132 sql_estcost 102 sql_estrows 1376 sql_actualrows 5244 sql_sqlerror 0 sql_isamerror 0 sql_isollevel 2 sql_sqlmemory 32608 sql_numiterators 4 sql_database db3 sql_numtables 3 sql_tablelist t1 sql_statement insert into t1 select {+ AVOID_FULL(sysindices) } 0, tabname
有关所有表行的解释,请参阅 GBase 8s 管理员参考 的 sysmaster 数据库部分中有关 syssqltrace 表的信息。