[MySQL] ステータス取得系の SQL まとめ
夏休みまだ取れてないよ~・・・夏終わっちゃうよ~・・・みなさん、こんちには nakamura です。
コンテンツ DB への更新・参照等は日々使うので割りと覚えやすいですが、パフォーマンスチューニング等行う際にテーブルや MySQL 自体のステータスを取得する SQL ってしょっちゅう使うわけではないので結構忘れがちですよね~。今日はその辺りの SQL 文を備忘録も兼ねてまとめてみようと思います。
テーブル関連
テーブルの一覧を取得。
show tables;
テーブル構造を取得。
describe table_name;
; describe にはショートカットが用意されています。
desc table_name;
CREATE TABLE 文を取得。
show create table table_name;
テーブルの状態を取得。
; 全てのテーブルを表示
show table status;
; 特定のテーブルのみ表示
show table status like 'table_name';
貼られているインデックスを取得。
show indexes from table_name;
ちなみにですが DB やテーブルに関するメタ情報は実は information_schema という DB に保存されています。なので以下のような SQL でもテーブルに関する様々な情報を取得可能です。
; information_schema に切り替え
use information_schema
; 任意のテーブルの情報を取得
select * from tables where table_name = 'table_name'\G
; テーブル名とテーブルエンジンの一覧を取得
select table_name, engine from tables;
information_schema の詳細については この辺り を参照ください。
データベース関連
DB の一覧を取得。
show databases;
CREATE DATABASE 文の取得。
show create database db_name;
現在接続中の DB の情報を取得。文字コードとか簡単に見れます。
status;
MySQL サーバ関連
MySQL サーバ自体の情報を取得します。基本的には SHOW STATUS 文で取得できます。
; 全てのステータス変数を取得。
show status;
; スレッド関連のステータスを取得。
show status like 'Threads_%';
; InnoDB 関連のステータスを取得。
show status like 'Innodb_%';
レプリケーション関連
スレーブのステータスを取得。
show slave status\G
マスターのステータスを取得。
show master status\G
SQL を解析
ちょっと今回のお題とはずれますが、EXPLAIN 文を使うと参照系 SQL の処理状況が確認できます。インデックスが効果的に使われているか等確認するのに有用です。
explain select * from users where group = 1 order by id desc;
終わりに
ちょうどデータ量の多い DB のチューニングを検討中だったので色々調べてみました。MySQL に限らないですがうまいこと使いこなせればすごいパフォーマンスを発揮するんだろうな~とは思いつつも中々そこまでのレベルには達していないと思う今日この頃です。参考になれば幸いです!
- 実践ハイパフォーマンスMySQL 第2版
- Baron Schwartz Peter Zaitsev Vadim Tkachenko Jeremy D. Zawodny Arjen Lentz Derek J. Balling 伊藤 直也 (監訳)
- オライリージャパン 2009-12-14
by G-Tools , 2012/08/29