2. SHOW 構文について SHOW は、データベース、テーブル、カラム、またサーバのステータス情報など様々な情報を提供する多くの形を持っています。 知っていると便利なものが多いので紹介いたします。
3. SHOW 構文一覧 (1/3) ・ SHOW AUTHORS MySQL のユーザー情報が表示されます。 Name 、 Location 、 Comment 値が表示されます。 このステートメントは MySQL 5.1.3 で追加されました。 ( 引用元 :http://dev.mysql.com/doc/refman/5.1/ja/show-authors.html) ・ SHOW CHARACTER SET MySQL で使用可能な文字コードの一覧が表示されます。 ・ SHOW COLLATION 「何の文字コードがきたらどの CHARACTER SET が使われるか」の一覧が表示されます。 ・ SHOW COLUMNS [table 名 ] 指定した [table 名 ] のテーブル列情報 ( が表示されます。「 DESC [table 名 ] 」と全く同じ働きをします。 ・ SHOW CONTRIBUTORS MySQL のソ-スに貢献した人や、 MySQL AB サポートを引き起こす情報を表示します。 それぞれの貢献者に対して、 Name 、 Location 、そして Comment 値を表示します。 このステートメントは、 MySQL 5.1.12 で追加されました。 ( 引用元 :http://dev.mysql.com/doc/refman/5.1/ja/show-contributors.html)) ・ SHOW CREATE DATABASE [DB 名 ] 指定した [DB 名 ] を作成するための CREATE DATABASE 構文が表示されます。 ・ SHOW CREATE TABLE [table 名 ] 指定した [table 名 ] を作成するための CREATE TABLE 構文が表示されます。 ・ SHOW CREATE VIEW [VIEW 名 ] 指定した [view 名 ] を作成するための CREATE VIEW 構文が表示されます。 ・ SHOW DATABASES ステートメントを実行した MySQL サーバー上のデータベースの一覧が表示されます。
4. SHOW 構文一覧 (2/3) ・ SHOW ENGINE [engine 名 ] STATUS 例 ) SHOW ENGINE INNODB STATUS ストレージ エンジンに関するログやステータス情報を表示します。 今現在 innodb と NDB(mysql クラスターのストレージエンジン ) のみ対応のようです。 (MyISAM は非対応 ) この構文は廃止予定らしいです (http://dev.mysql.com/doc/refman/5.1/ja/show-innodb-status.html) ・ SHOW ERRORS 直近のエラーが表示されます。 ・ SHOW GRANTS FOR [user 名 ] 指定された [user 名 ] の情報が表示されます。 ・ SHOW INDEX FROM [table 名 ] 指定 [table 名 ] に付与されている index の情報が表示されます。 ・ SHOW INNODB STATUS SHOW ENGINE 構文、「 SHOW ENGINE INNODB STATUS 」を実行した際と同じです。 ・ SHOW PRIVILEGES サーバーがサポートするシステム権限一覧 (Create 権限、 Alter 権限等 ) が表示されます。 ・ SHOW [FULL] PROCESSLIST 非常に便利なので別ページにて詳細を記述しました。 ・ SHOW STATUS サーバ ステータス情報の一覧が表示されます。
5.
6. 以下の REPLICATION 環境で動く SHOW 構文 ( 複製ステートメント ) ついては ・ SHOW SLAVE STATUS slave 側の状況が一覧表示 ・ SHOW MASTER STATUS master 側の状況が一覧表示 ・ SHOW BINLOG EVENTS バイナリ ログ内のイベント を表示。 ※ limit 句必須・・・ バイナリ ログのコンテンツ ( データを変更するサーバによって実行された全てのステートメントを含む ) を返す ので 大量にリソースを消費してしまいます。 ・ SHOW BINARY LOGS バイナリログの一覧 (file size も ) が表示 フラクタリストエンジニア知識共有会議事録ブログ mysql のレプリケーション障害の復旧 http://techknowledge.fractalist.jp/20091001/62 にて紹介されております。 どれだけ遅延が発生しているか、どんなエラーが発生しているか等々 一目で分かるような一覧が表示されます。 レプリケーションで情報を得たい場合は必須といっても過言ではない構文です。
7.
8. SHOW PROCESSLIST 構文を実行した際に表示される State や Command に表示される文言について (1/4) 大体わかるけど、「 Sending data 」って具体的に何なの?といったものがあると思います。 それらを調べてみました。 Checking table スレッドがテーブルの自動チェックを実行している。 Closing tables スレッドが、変更されたテーブルデータをディスクにフラッシュし、使用したテーブルを閉じている。これには通常 それほど時間がかからない。時間がかかる場合、ディスクの使用率をチェックする必要がある。 Copying to tmp table on disk テンポラリ結果セットが tmp_table_size よりも大きく、スレッドがメモリベースのテンポラリテーブルをディスクベースに変更して、メモリの節約を図っている。 Creating tmp table スレッドは、クエリの結果の一部を保持するためのテンポラリテーブルを作成中。 deleting from main table 複数テーブルを削除する最初の段階で、最初のテーブルを削除中。 deleting from reference tables 複数テーブルを削除する 2 番目の段階で、他のテーブルから、一致したレコードを削除中。
9. SHOW PROCESSLIST 構文を実行した際に表示される State や Command に表示される文言について (2/4) Flushing tables スレッドが FLUSH TABLES を実行中。すべてのスレッドによりそのテーブルが閉じられるのを待っている。 Killed 誰かがスレッドを強制終了の命令を出したため、次回のキルフラグチェック時に強制終了される。 MySQL では大きな各ループ でフラグがチェックされるが、それでもスレッド終了には少し時間がかかる場合がある。スレッドが他のスレッドによってロックされ ている場合、そのロックが解除されたところで強制終了が実行される。 Sending data SELECT ステートメントのレコードを処理中で、かつクライアントにデータを送信中。 Sorting for group GROUP BY のソートを実行中。 Sorting for order ORDER BY のソートを実行中。 Opening tables スレッドがテーブルを開こうとしている。これは、何かが妨害していなければすぐに終わるはずである。たとえば、 ALTER TABLE や LOCK TABLE などにより、そのコマンドの終了時までテーブルが開かないことがある。 Removing duplicates クエリで SELECT DISTINCT が使用されたが、 MySQL は初期段階で重複を除外する最適化を実行できなかった。 このため、 MySQL は結果をクライアントに送信する前に、重複レコードを削除する段階を踏む必要がある。
10. SHOW PROCESSLIST 構文を実行した際に表示される State や Command に表示される文言について (3/4) Reopen table スレッドはテーブルのロックを取得したが、ロック取得後、下のテーブル構造が変更されていることを認識した。 このため、ロックを解除し、テーブルを閉じて、再び開こうとしている。 Repair by sorting 修復コードがソートを使用してインデックスを作成している。 Repair with keycache 修復コードが、キーキャッシュにより、キーを 1 つずつ作成している。これは、 Repair by sorting よりも大幅に時間がかかる。 Searching rows for update スレッドがレコード更新の初期段階として、更新対象の一致レコードを検索中である。レコード検索に使用するインデックスを UPDATE が変更すると、この段階が必要となる。 Sleeping クライアントから新しいコマンドが送信されるのを待っている。 System lock テーブルの外部システムロックを待っている。同じテーブルにアクセスする複数の mysqld サーバを使用していない場合、 --skip-external-locking オプションでシステムロックを無効にできる。 Upgrading lock INSERT DELAYED ハンドラが、レコード挿入のためにテーブルをロックしようとしている。
11. SHOW PROCESSLIST 構文を実行した際に表示される State や Command に表示される文言について (4/4) Updating スレッドが更新対象レコードを検索して更新している。 User Lock GET_LOCK() を待っている。 GET_LOCK ・・・ロックが取得された場合 1 が返される関数。 Waiting for tables テーブル構造が変更されているため、テーブルを開き直して新しい構造を取得する必要があるという通知をスレッドが受け取った。 テーブルを開き直すためには、他のすべてのスレッドがそのテーブルを閉じるのを待つ必要がある。 waiting for handler insert INSERT DELAYED ハンドラがすべての挿入処理を完了し、新規の挿入を待機中である。
12. まとめ SHOW 構文を知っていれば、何かと情報を引き出したい時に非常に有効です。 ・どこかにテーブル設計資料があるはずだけど探す時間が惜しい。 ・ MySQL の設定ファイルの場所どこだっけ、でもあのコマンドで一発。 ・本当に!いま!すぐにでもあの情報が見たい!状況が見たい! Etc etc… といった状況等、 ちょっと show 構文を覚えてるだけで無駄な時間削減となります。 引用、参考元 Sun microsystems MySQL.com 12.5.4. SHOW 構文 http://dev.mysql.com/doc/refman/5.1/ja/show.html