mita2 database life

主にMySQLに関するメモです

サーバサイドプリペアドステートメントはperformance_schemaに記録されない

あるクエリがperformance_schemaに記録されなかった。
原因を調べていて1つ記録されない条件を見つけたのでメモ。

まず、問題ないパターン。

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2019-07-30 10:40:47 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT SQL_TEXT FROM events_statements_history;
+-------------------------------------------------------------------+
| SQL_TEXT                                                          |
+-------------------------------------------------------------------+
| NULL                                                              |


|
| NULL                                                              |
| CALL sys.ps_truncate_all_tables(FALSE)                            |
| SELECT NOW()                                                      |
| NULL                                                              |
+-------------------------------------------------------------------+
10 rows in set (0.00 sec)



「SELECT NOW()」がしっかり、performance_schemaに記録されてますね。
しかし、サーバサイド プリペアドステートメントを使うと・・・

mysql> PREPARE stmt FROM 'SELECT "PREPARE"';
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE stmt;
+---------+
| PREPARE |
+---------+
| PREPARE |
+---------+
1 row in set (0.00 sec)

mysql> SELECT SQL_TEXT FROM events_statements_history;
+-------------------------------------------------------------------+
| SQL_TEXT                                                          |
+-------------------------------------------------------------------+
| NULL                                                              


| NULL                                                              |
| CALL sys.ps_truncate_all_tables(FALSE)                            |
| PREPARE stmt FROM ...                                             |
| EXECUTE stmt                                                      |
+-------------------------------------------------------------------+
10 rows in set (0.00 sec)





(゚д゚)あらやだ! クエリの部分が「...」になってしまったワ。
ファンクションやプロシージャの中のSQLも記録されませんから、それと同じと思えば、違和感ないか?

子ネタでした(つづく?)