MySQL 檢視最近執行失敗的SQL語句

2022-02-17 07:37:02 字數 4059 閱讀 1100

mysql版本:5.7.31

根據《mysql效能優化金字塔法則》做的實驗,好書推薦!

performance_schema中語句時間記錄表中針對每一條語句的執行狀態都記錄了較為詳細的資訊,其中就包含了執行錯誤資訊。

記錄語句資訊的表一般為performance_schema中的四張表,分別為

mysql> select * from performance_schema.setup_consumers where name like 'events_statements%';

+--------------------------------+---------+

| name | enabled |

+--------------------------------+---------+

| events_statements_current | yes |

| events_statements_history | yes |

| events_statements_history_long | no | -- 未啟用

+--------------------------------+---------+

生產環境中,每個執行緒執行的sql很多,我們啟用events_statements_history_long表記錄更多的sql資訊(可以通過修改performance_schema.threads針對特定的執行緒進行記錄資訊,降低對效能的影響程度)

啟用events_statements_history_long

mysql > update performance_schema.setup_consumers set enabled = 'yes' where name ='events_statements_history_long';
會話1,執行明顯格式錯誤的sql,這裡可以看到錯誤號是1096

mysql> select *;

error 1096 (hy000): no tables used

會話2,可以看到執行的對應內部執行緒號等具體資訊,環境是測試環境,所以剛好查出只有這一條,生產中應該查出來不止一條,會有很多條。

mysql> select * from performance_schema.events_statements_history_long where mysql_errno=1096\g;

*************************** 1. row ***************************

thread_id: 173475 <-- 內部執行緒號

event_id: 38480

end_event_id: 38497

event_name: statement/sql/select

source:

timer_start: 1050983430258683000

timer_end: 1050983430962477000

timer_wait: 703794000

lock_time: 0

sql_text: select *

digest: ed17d00b1d52bf7da4ae01c523c15c5a

digest_text: select *

current_schema: performance_schema

object_type: null

object_schema: null

object_name: null

object_instance_begin: null

mysql_errno: 1096 <-- 錯誤號

returned_sqlstate: hy000

message_text: no tables used

errors: 1

warnings: 0

rows_affected: 0

rows_sent: 0

rows_examined: 0

created_tmp_disk_tables: 0

created_tmp_tables: 0

select_full_join: 0

select_full_range_join: 0

select_range: 0

select_range_check: 0

select_scan: 0

sort_merge_passes: 0

sort_range: 0

sort_rows: 0

sort_scan: 0

no_index_used: 0

no_good_index_used: 0

nesting_event_id: null

nesting_event_type: null

nesting_event_level: 0

1 row in set (0.01 sec)

mysql>select * from performance_schema.events_statements_history_long where errors != 0\g;

*************************** 1. row ***************************

thread_id: 173475

event_id: 38480

end_event_id: 38497

event_name: statement/sql/select

source:

timer_start: 1050983430258683000

timer_end: 1050983430962477000

timer_wait: 703794000

lock_time: 0

sql_text: select *

digest: ed17d00b1d52bf7da4ae01c523c15c5a

digest_text: select *

current_schema: performance_schema

object_type: null

object_schema: null

object_name: null

object_instance_begin: null

mysql_errno: 1096

returned_sqlstate: hy000

message_text: no tables used

errors: 1

warnings: 0

rows_affected: 0

rows_sent: 0

rows_examined: 0

created_tmp_disk_tables: 0

created_tmp_tables: 0

select_full_join: 0

select_full_range_join: 0

select_range: 0

select_range_check: 0

select_scan: 0

sort_merge_passes: 0

sort_range: 0

sort_rows: 0

sort_scan: 0

no_index_used: 0

no_good_index_used: 0

nesting_event_id: null

nesting_event_type: null

nesting_event_level: 0

補充:

MySQL案件 mysql登入 S失敗

1.1.1.mysql登入mysql時間,s引數失效 環境的敘述性說明 mysql5.5.14 問題敘述性說明 配置多個例項 例項1例項2 datadir home mysql 3306 home mysql 3307 basedir usr usr socket home mysql 3306 m...

執行mysql指令碼 mysql下如何執行sql指令碼

首要步驟 一般可省略 開啟mysql服務 預設是開機時就自動執行了 控制面板 管理工具 服務,在裡面找到名稱為mysql的項,雙擊就可看它的服務狀態是啟動還是停止,把它設為啟動 連線mysql 在命令列下輸入 mysql h localhost u root p回車,然後輸入密碼即可 或直接執行my...

MYSQL檢視執行計畫

1 概述 執行計畫的檢視是進行資料庫的sql語句調優時依據的乙個重要依據,mysql的執行計畫檢視相對oracle簡便很多,功能也相對簡單很多的sql語句都不能直接檢視。2 執行計畫的生成和檢視 2.1 執行計畫的生成方法 explain select 生成的方法很簡單在相應的select前面加ex...