2891 件中 1 - 10 件を表示
次の 10 件 »
今日は、MySQL 8.0 にて JOIN_FIXED_ORDERを使って JOIN する順番を指定してチューニング検証してみたの日。

目次

[さらに読む]
mysql_use_result(サーバーサイドバッファリング) vs. history list length


TL;DR

  • トランザクション分離レベルがたとえREAD-UNCOMMITTEDだとしても、クエリの実行中はhistory list lengthは伸びていく

    • REPEATABLE-READ .. トランザクション中はundo recordをパージできない

    • READ-COMMITTED, READ-UNCOMMITTED .. クエリの実行中はundo recordをパージできない

  • ところで、 mysql_use_result はSQLの評価が終わった後に結果セットをクライアントに送信するのを遅延させる(サーバーサイドでバッファリングさせる)ので、クライアントが結果セットを全部読みだしてくれるまでは「MySQL上ではクエリ実行中扱い」

    • というわけで、history list …
[さらに読む]
MySQL8.0におけるSKIP LOCKED

前回のブログで、MySQLとPostgreSQLの基本的なロックに関してはまとめたので、ここでは、MySQL8.0から加わっている。SKIP LOCKEDとNOWAITオプションについて追記します。

RDBMSにおけるLockの挙動

MySQL8.0 (NOWAIT and SKIP LOCKED)

WL#3597: Implement NOWAIT and SKIP LOCKED
WL#8919: InnoDB: Implement NOWAIT and SKIP LOCKED

これまでの挙動としては、LOCK TIMEOUT待ちが主なレスポンスでした。

LOCK Wait and TimeoutMySQL8.0では、以下オプションが利用可能です。

  • for update of <table名> SKIP LOCKED; /*** …
[さらに読む]
どうしてもSELECT COUNT(*) せずに正しいレコードの数を数えたい(が、そんなに都合の良いことはなかった)

 

TL;DR

  • innochecksumを使って強引に数えてみた
  • こんなことをするくらいならおとなしくCOUNT(*) した方がマシ

SHOW TABLE STATUS や information_schema.tables は統計情報ベースなので正確な値ではない、でも COUNT(*) はしたくない、という時。

mysql> SHOW TABLE STATUS LIKE 't1'\G
*************************** 1. row ***************************
Name: t1
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 94295380
Avg_row_length: 37
Data_length: 3515875328
Max_data_length: 0
Index_length: 3868196864
Data_free: 6291456
Auto_increment: NULL
Create_time: 2022-05-23 21:43:56
Update_time: 2022-05-23 22:43:29
Check_time: NULL
[さらに読む]
DROP TABLEがどれくらいその他のトラフィックに影響を与えるか……を、手元で測る方法

 

TL;DR

  • sysbenchでDROP用のテーブルと、その他トラフィック用のテーブルをprepareして

  • sysbench runしながらDROP TABLEするだけ

sysbenchは無ければインストール(CentOS 7.xだとepelに入ってる)


$ sudo yum install -y sysbench

ベンチ先がMySQL 8.0の場合、 default_authentication_plugin=mysql_native_password かつ、sysbench用のアカウントがmysql_native_passwordでされてないとエラーになる。


FATAL: error 2059: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

FATAL: `sysbench.cmdline.call_command' function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation …
[さらに読む]
MySQLが勝手に作るファイルのパーミッションを指定する

 

TL;DR

[さらに読む]
MySQLだけでWindow関数を使って@rowとか使わずに95%ileを計算したい

やり方があってるかどうかわからないので違ってたら教えてほしい。

サンプルデータこんな感じ。


mysql80 209534> SELECT * FROM t1 LIMIT 3;

+---------------------+-----------+
| dt | rows_read |
+---------------------+-----------+
| 2022-05-31 17:16:00 | 0 |
| 2022-05-31 17:16:01 | 6 |
| 2022-05-31 17:16:03 | 0 |
+---------------------+-----------+

3 rows in set (0.00 sec)

まずは全期間でrows_readの95%ileを計算してみたい。

パーセンタイルを一発で求めるなにかは無さそうなので、まずはおとなしくRANK()で並べ替える。

mysql80 209534> SELECT dt, rows_read, RANK() OVER (ORDER BY rows_read) AS _rank FROM t1;
+---------------------+-----------+-------+
| dt | rows_read | _rank | …
[さらに読む]
今日は、気になってのでMySQLのメタデータロック(MDL)を調べてみたの日。

目次

[さらに読む]
Aurora MySQL と MySQL Community Edition の performance_schema instruments 差分

メモです。performance_schema.setup_instruments テーブルの比較

MySQL Community Edition (v5.7.38) にしかない instruments

$ diff setup_instruments_aurora.log setup_instruments_community.log | grep '^>'
> wait/synch/mutex/sql/LOCK_slave_trans_dep_tracker
> wait/synch/mutex/sql/LOCK_keyring_operations
> wait/synch/mutex/sql/LOCK_thread_cache
> wait/synch/mutex/sql/LOCK_connection_count
> wait/synch/mutex/sql/LOCK_thd_remove
> wait/synch/mutex/innodb/dict_sys_mutex
> wait/synch/mutex/innodb/fts_pll_tokenize_mutex
> wait/synch/mutex/innodb/log_sys_write_mutex
> wait/synch/mutex/innodb/log_cmdq_mutex
> wait/synch/mutex/innodb/page_cleaner_mutex
> wait/synch/mutex/innodb/thread_mutex
> wait/synch/mutex/innodb/sync_array_mutex
> wait/synch/mutex/innodb/row_drop_list_mutex
> wait/synch/rwlock/validate/LOCK_dict_file
> …
[さらに読む]
今日は、MySQL InnoDB Cluster の座学メモの日。

目次

[さらに読む]
2891 件中 1 - 10 件を表示
次の 10 件 »