PolarDB MySQL版提供的SQL Trace功能,用於跟蹤SQL語句的執行資訊,如:執行計畫和執行統計資訊(包括掃描行數、執行時間等)。可以協助您快速地發現因執行計畫變更而引發的效能變化,並統計當前叢集中消耗負載較大的TopSQL。
前提條件
PolarDB叢集版本需滿足以下條件之一:
PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.30及以上。
PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.12及以上。
您可以通過查詢版本號碼來確認叢集版本。
使用限制
SQL Trace功能不會跟蹤與帳號相關的操作。如:CREATE USER、DROP USER和GRANT等。
參數說明
參數名稱 | 描述 |
loose_sql_trace_type | SQL Trace跟蹤類型。取值範圍如下:
說明 僅支援在PolarDB MySQL版8.0.1版本,且修訂版本為8.0.1.1.34及以上的版本使用SLOW_QUERY。 |
loose_sql_sharing_size | 儲存SQL Sharing(SQL Trace中的基礎組件)的最大使用記憶體。 取值範圍:8388608~1073741824。單位:位元組。預設值為134217728。 |
loose_sql_trace_plan_expire_time | SQL Trace跟蹤的執行計畫失效時間。當執行計畫超過該時間且未被命中後,該執行計畫將會被判定為到期,可以將其淘汰。 取值範圍:0~18446744073709551615。單位:秒。預設值為604800。 |
使用說明
添加需要跟蹤的SQL語句。
您可以通過以下兩種方式來添加需要跟蹤的SQL語句,並通過SQL Trace功能來跟蹤SQL語句的執行資訊。
將
loose_sql_trace_type
參數值設定為ALL,來跟蹤所有的SQL語句。將
loose_sql_trace_type
參數值設定為DEMAND,通過dbms_sql.add_trace預存程序添加指定的需要跟蹤的SQL語句。
擷取使用SQL Trace功能跟蹤的SQL語句的資訊。
您可以通過訪問information_schema.sql_sharing表來擷取使用SQL Trace功能跟蹤的SQL語句的執行資訊和TopSQL等。樣本如下:
擷取指定SQL的執行資訊和執行計畫資訊。
SELECT * FROM information_schema.sql_sharing WHERE sql_id = polar_sql_id('select * from t');
分別擷取按照總執行時間、平均執行時間和總掃描行數三個維度Top10的SQL語句。
SELECT * FROM information_schema.sql_sharing WHERE TYPE='sql' ORDER BY SUM_EXEC_TIME DESC LIMIT 10; SELECT * FROM information_schema.sql_sharing WHERE TYPE='sql' ORDER BY SUM_EXEC_TIME/EXECUTIONS DESC LIMIT 10; SELECT * FROM information_schema.sql_sharing WHERE TYPE='sql' ORDER BY SUM_ROWS_EXAMINED DESC LIMIT 10;
其他動作
如果不再需要跟蹤通過dbms_sql.add_trace預存程序添加的SQL語句,您可以通過dbms_sql.delete_trace預存程序根據具體的SQL語句來刪除模板化的SQL語句,或通過dbms_sql.delete_trace_by_sqlid預存程序根據SQL ID來刪除模板化的SQL語句。
您可以通過dbms_sql.reset_trace_stats預存程序來重設information_schema.sql_sharing表中的所有統計資訊。
您可以通過dbms_sql.flush_trace預存程序來清理information_schema.sql_sharing表中的所有統計資訊。清理完成後,如果需要再次統計通過dbms_sql.add_trace預存程序添加的SQL語句的執行情況,您可以通過dbms_sql.reload_trace預存程序將mysql.sql_sharing表中模板化SQL語句重新匯入至information_schema.sql_sharing表中。
效能測試
SQL Trace內部使用了大量的無鎖設計,能夠保證在高並發、SQL模板數量較多等情境下的資料庫效能。
以下測試為相同情境下,sql_trace_type
參數值設定為OFF和ALL時的效能對比。
Sysbench測試資料量為2千張表,每張表1萬行資料。叢集規格分別為4核8 GB和8核32 GB。
叢集規格為4核8 GB時的效能對比如下:
db-ps-mode=disable oltp_read_only
db-ps-mode=auto oltp_read_write
叢集規格為8核32 GB時的效能對比如下:
db-ps-mode=disable oltp_read_only
db-ps-mode=auto oltp_read_write
結論
由以上的測試資料得出:在oltp_read_only和oltp_read_write情境下SQL Trace對效能的影響均不超過3%。