自宅Wi-Fi 環境物語あるいはWi-Fiルーターを買った件あなたは「ふるさと納税」をやりますか?やりませんか?

2017/07/26

トップページ技術データベース

MySQLのインデックス周りでちょいメモ

【はじめに】
大昔に書こう思って放置していた件なので、情報が古かったらごめんなさい。



-----------
【その1】統計情報の作り方

MySQLの実行計画はデータをサンプリングした統計情報をもとに決定する。

なので、データ量が少なく分布がある程度均一で無い場合は、
作成したインデックスが利用されなかったりするんですよね。

なお、InnoDB利用時のサンプリング実施タイミングは、

InnoDBは以下の条件に適合すると、ANALYZE TABLEを自動的に行う仕組みになっている。
 ・ 前回インデックス統計情報を更新してから、テーブルの行数全体の1/16が更新された。
 ・ 前回インデックス統計情報を更新してから、20億行以上更新された。

とのこと。

場合によっては統計情報の自動更新を止めるのも手なのですが、
その場合はどのタイミングで実施するかが悩ましいですね。

-----------
【その2】インデックス作成が終わらない件

ある日、インデックス作成してみたら、いくら待ってもクエリが終わらない、、、

SHOW FULL PROCESSLIST\Gで確認してみると、
「Waiting for table metadata lock」と表示されていました。

影響しそうなSelect文を実行しているスレッドをKillしてみると、無事に完了。
Select文でもロックされることがあるんですねぇ。

もしかしたら、こちらと同件なのかも。
サービス稼働中にMySQLでALTER TABLEしたら Waiting for table metadata lock が溢れて死んだ - Qiita


  このエントリーをはてなブックマークに追加

 にほんブログ村 IT技術ブログ システムエンジニアへ  ← その他のSEブログはこちら・応援クリック歓迎
tsutaken at 11:55│Comments(0)技術 | データベース

コメントする

名前
 
  絵文字
 
 
自宅Wi-Fi 環境物語あるいはWi-Fiルーターを買った件あなたは「ふるさと納税」をやりますか?やりませんか?