MySQL SHOW 構文について
SHOW 構文について SHOW  は、データベース、テーブル、カラム、またサーバのステータス情報など様々な情報を提供する多くの形を持っています。 知っていると便利なものが多いので紹介いたします。
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 サーバー上のデータベースの一覧が表示されます。
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 サーバ ステータス情報の一覧が表示されます。
SHOW 構文一覧 (3/3) ・ SHOW TABLES TEMPORARY  テーブル以外のテーブル名一覧が表示されます。 テーブル名の一覧だけなので個人的に微妙な存在です。 ・ SHOW TABLE STATUS 「 SHOW TABLES 」構文と同じような機能ですが、こちらは各テーブルに関する多くの情報が表示されます。 サーバー上で以下のコマンドを行った際も同じ情報が表示されます。 $ mysqlshow --status [DB 名 ] ・ SHOW VARIABLES MySQL  システム変数の値が表示されます。 この構文も便利で、わざわざ ini ファイルを探して開かなくても良い場合が多々あります。 項目が非常に多いので LIKE 文を使用すると見やすいかもしれません。 例 ) size という文字が含まれるシステム変数名 SHOW VARIABLES LIKE '%size%';   ・ SHOW WARNING 最後に実行されたエラー、警告、そしてノート メッセージが表示されます。 ※ 良く似ている構文「 SHOW ERRORS 」構文は、エラーメッセージのみ。
以下の 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 にて紹介されております。 どれだけ遅延が発生しているか、どんなエラーが発生しているか等々 一目で分かるような一覧が表示されます。 レプリケーションで情報を得たい場合は必須といっても過言ではない構文です。
SHOW [FULL] PROCESSLIST 当構文を実行した時点でのスレッド ( プロセス ) の一覧が表示されます。 [FULL] を付与すると実行されている SQL 文の全文が確認できます。 FULL を指定しない場合は実行されている SQL 文の 100 文字まで表示されます。 表示されているカラムの [id] を使用して「 KILL 構文」を使用し、実行されている SQL を強制的に削除することが可能です。 例 )id 1111 のスレッドを強制削除 kill 1111; ‘ too many connections’  エラーの際の、原因を知りたいときにも便利です。 ( 現在のプロセス数 ( コネクション数 ) が分かるため )
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  番目の段階で、他のテーブルから、一致したレコードを削除中。
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  は結果をクライアントに送信する前に、重複レコードを削除する段階を踏む必要がある。
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 ハンドラが、レコード挿入のためにテーブルをロックしようとしている。
SHOW PROCESSLIST 構文を実行した際に表示される State や Command に表示される文言について  (4/4) Updating スレッドが更新対象レコードを検索して更新している。   User Lock GET_LOCK()  を待っている。  GET_LOCK ・・・ロックが取得された場合 1 が返される関数。 Waiting for tables テーブル構造が変更されているため、テーブルを開き直して新しい構造を取得する必要があるという通知をスレッドが受け取った。 テーブルを開き直すためには、他のすべてのスレッドがそのテーブルを閉じるのを待つ必要がある。  waiting for handler insert INSERT DELAYED  ハンドラがすべての挿入処理を完了し、新規の挿入を待機中である。
まとめ SHOW  構文を知っていれば、何かと情報を引き出したい時に非常に有効です。 ・どこかにテーブル設計資料があるはずだけど探す時間が惜しい。 ・ MySQL の設定ファイルの場所どこだっけ、でもあのコマンドで一発。 ・本当に!いま!すぐにでもあの情報が見たい!状況が見たい! Etc etc… といった状況等、 ちょっと show 構文を覚えてるだけで無駄な時間削減となります。 引用、参考元 Sun microsystems MySQL.com 12.5.4. SHOW  構文 http://dev.mysql.com/doc/refman/5.1/ja/show.html

MySQLSHOW構文について 20091019

  • 1.
  • 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.
    SHOW 構文一覧 (3/3)・ SHOW TABLES TEMPORARY テーブル以外のテーブル名一覧が表示されます。 テーブル名の一覧だけなので個人的に微妙な存在です。 ・ SHOW TABLE STATUS 「 SHOW TABLES 」構文と同じような機能ですが、こちらは各テーブルに関する多くの情報が表示されます。 サーバー上で以下のコマンドを行った際も同じ情報が表示されます。 $ mysqlshow --status [DB 名 ] ・ SHOW VARIABLES MySQL システム変数の値が表示されます。 この構文も便利で、わざわざ ini ファイルを探して開かなくても良い場合が多々あります。 項目が非常に多いので LIKE 文を使用すると見やすいかもしれません。 例 ) size という文字が含まれるシステム変数名 SHOW VARIABLES LIKE '%size%'; ・ SHOW WARNING 最後に実行されたエラー、警告、そしてノート メッセージが表示されます。 ※ 良く似ている構文「 SHOW ERRORS 」構文は、エラーメッセージのみ。
  • 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.
    SHOW [FULL] PROCESSLIST当構文を実行した時点でのスレッド ( プロセス ) の一覧が表示されます。 [FULL] を付与すると実行されている SQL 文の全文が確認できます。 FULL を指定しない場合は実行されている SQL 文の 100 文字まで表示されます。 表示されているカラムの [id] を使用して「 KILL 構文」を使用し、実行されている SQL を強制的に削除することが可能です。 例 )id 1111 のスレッドを強制削除 kill 1111; ‘ too many connections’ エラーの際の、原因を知りたいときにも便利です。 ( 現在のプロセス数 ( コネクション数 ) が分かるため )
  • 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