RDBMS Engine Inspection for Troubleshooting

RDBMS Engine Inspection for Troubleshooting

MySQL

  • 設定確認

SHOW GLOBAL VARIABLES;
  • 状態確認

SHOW GLOBAL STATUS;
  • システム設定値確認(グローバル)

SHOW GLOBAL VARIABLES
  • システム設定値確認(セッション)

SHOW (SESSION) VARIABLES
  • Innodb 詳細確認

SHOW ENGINE INNODB STATUS\G;
  • 実行しているクエリー

SHOW FULL PROCESSLIST \G;
  • 実行したクエリー

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST ORDER BY id DESC LIMIT 10\G;
  • レプリケーションをしているスレーブの有無確認

  • マスター/スレーブの状態確認

  • インデックス確認

  • テーブルの情報取得

  • プロセスの各ステータスで要した時間を調査

  • 権限一覧取得

  • スロークエリー発行

  • 権限詳細取得

  • サイズの大きいテーブルを順番に表示(現在のデータベース)

  • サイズの大きいテーブルを順番に表示(データベース内のテーブル全体)

  • 指定したSQLの実行時間測定

  • テーブルDDL

  • エンジン内部のクエリー状況等調査

MySQL 8.0未満

  • コマンドの結果を定期的に取得

historyにパスワード等を残したくない場合 .my.cnf.XXXXXを以下の内容で作成してchmod 600を設定。

  • ロングトランザクションがあるかどうか確認するクエリ

  • history list length を確認するクエリ

  • 待機しているトランザクションと待機させているトランザクションを確認するクエリ

インポート/エクスポート

各種メモリサイズ調査

  • メモリ使用量分析

PostgreSQL

  • 基本

INSERT INTO pg_stat_activity_log SELECT now(), * from pg_stat_activity;のようにログテーブルに蓄積しておくのも手

  • DDL取得

Oracle

  • DDL取得

参考

  • MySQLインスタンスのメモリ領域

    • グローバルメモリ領域

    • query_cache

    • thread_cache

    • table_cache

    • InnoDBテーブル用のメモリ領域

      • innodb_buffer_pool

      • innodb_log_buffer

      • innodb_additional_mem_pool

    • MyISAMテーブル用のメモリ領域

      • key_buffer

    • HEAPテーブル用のメモリ領域

    • スレッド専用メモリ領域

    • join_buffer

    • read_buffer

    • sort_buffer

    • thread_stack

    • binlog_cache

    • max_allowed_packet

  • OS管理領域

    • OSバッファキャッシュ

    • データベース領域

    • MYIファイル

    • MYDファイル

    • InnoDBログファイル

    • frmファイル

    • バイナリログファイル

    • InnoDBデータファイル

参考

  • https://dev.mysql.com/doc/refman/5.6/ja/sql-syntax.html

  • https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html

  • https://qiita.com/yoheiW@github/items/23c5791b34da6f814056

  • https://www.qoosky.io/techs/3a369dd466

  • https://www.percona.com/blog/2006/07/17/show-innodb-status-walk-through/

  • https://open-groove.net/mysql/seek-mysql-memory/

  • http://nippondanji.blogspot.jp/2011/12/mysql.html

  • http://nippondanji.blogspot.jp/2009/03/mysql10.html

個人ブログ

  • Yakst: https://yakst.com/ja/tags/mysql

    • MySQLのメモリー使用量を最適化する設定のベストプラクティス: https://yakst.com/ja/posts/3983

  • 漢(オトコ)のコンピュータ道

    • http://nippondanji.blogspot.jp/search/label/mysql

    • http://nippondanji.blogspot.jp/search/label/performance%20tuning

    • MySQLを高速化する10の方法: http://nippondanji.blogspot.jp/2009/02/mysql10.html

    • さらにMySQLを高速化する7つの方法: http://nippondanji.blogspot.jp/2009/03/mysql7.html

    • InnoDBのログとテーブルスペースの関係: http://nippondanji.blogspot.jp/2009/01/innodb.html

    • MySQLのEXPLAINを徹底解説!!: http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html

    • Using filesort: http://nippondanji.blogspot.jp/2009/03/using-filesort.html

    • オトコのソートテクニック2008: http://nippondanji.blogspot.jp/2008/12/2008.html

    • 限界までMySQLを使い尽くす!!: http://nippondanji.blogspot.jp/2009/05/mysql.html

    • MySQLにおけるレプリケーション遅延の傾向と対策: http://nippondanji.blogspot.jp/2011/12/mysql.html

    • 大人のためのInnoDBテーブルとの正しい付き合い方。: http://nippondanji.blogspot.jp/2010/09/innodb.html

    • やってはいけない!!MySQLに悲鳴をあげさせる10の方法: http://nippondanji.blogspot.jp/2009/04/mysql10.html

    • なぜMySQLのサブクエリは遅いのか。: http://nippondanji.blogspot.jp/2009/03/mysql_25.html

    • 知って得するInnoDBセカンダリインデックス活用術!: http://nippondanji.blogspot.jp/2010/10/innodb.html

    • InnoDBでCOUNT()を扱う際の注意事項あれこれ。: http://nippondanji.blogspot.jp/2010/03/innodbcount.html

    • InnoDBのREPEATABLE READにおけるLocking Readについての注意点: http://nippondanji.blogspot.jp/2013/12/innodbrepeatable-readlocking-read.html

  • Sergey Petrunia’s blog: http://s.petrunia.net/blog/?p=24

  • MySQLのmetricに関する話: http://labs.gree.jp/blog/2018/06/16962/

  • 誰も教えてくれなかったMySQLの障害解析方法: https://qiita.com/muran001/items/14f19959d4723ffc29cc

サンプルデータ

  • https://downloads.mysql.com/docs/world.sql.gz

  • https://github.com/awslabs/aws-database-migration-samples

Last updated