Category Archives: データベース

mysql_clr

MySQLに限らず、DBチューニング時の着眼点を以下に纏めてみた。 1. SQL 2. DB論理設計(インデックス含む) 3. DB物理設計 4. アプリケーションロジック 5. メモリリソース 6. ディスクI/O 7. ネットワーク 8. OS 上記の各項目の確認時のポイントと方法の概要をMySQLの場合を想定し以下に記載。 1. SQL  ポイント:SQLの書き方によって、パフォーマンスが著しく       低下することがあるため、実行に一定時間以上       かかったものや、テーブルフルスキャンを行った       SQLの有無を確認する。  方法  :スロークエリログの確認 2. DB論理設計(インデックス含む)  ポイント:テーブル毎のデータ件数と、取得方法を想定して       インデックスを定義する。       膨大なデータを扱う場合は、特にテーブルの       パーティショニングも検討する等。  方法  :各テーブル毎のデータ件数と、データサイズの想定、       テーブル間のリレーション(ER)を確認。       EXPLAIN文による診断。 3. DB物理設計  ポイント:サーバ構成とデータファイルを配置するパーティション       及び、ファイルシステムが適切かどうか。       無駄にデータの格納サイズを必要とした型定義は無いか。  方法  :物理的なパーティションの分割やRAIDタイプ、ファイル       システムの確認。       EXPLAIN文による診断。       mytopコマンドによるMySQLの実行状況の確認       TOPコマンド等でOSの各種リソース使用状況の確認。 4. アプリケーションロジック  ポイント:DBアクセスを減らす       クエリキャッシュのヒット率を上げる       JOIN等で取得する必要情報をSQLで取得するか、       ロジックで吸収するかのコスト判断       複数のコアを持ったサーバ上で動かす場合、       CPUを効率よく使用できるつくりになっているか。  方法  :SQLのチューニングと関連して、以下を検討する。       アプリケーションの処理時間をデバックコードで確認       EXPLAIN文による診断。       SHOW STATUS コマンドによる、各種情報の確認。 5. メモリリソース  ポイント:OSのメモリ使用量と合わせて、クエリキャッシュや       max_connectionsやthread_cache_sizeの適切な       設定値を検討する。  方法  :max_used_connectionsを確認し、max_connectionsの       設定値に達しているか否かを確認。       達している場合は設定値を上げるかコネクションプールを       使用する方向で、メモリリソースを検討する。       SHOW STATUS コマンドによる、各種情報の確認。       mytopコマンドによるMySQLの実行状況の確認       TOPコマンド等でOSの各種リソース使用状況の確認。 6. ディスクI/O  ポイント:ディスクI/Oを確認し、I/O待ちが発生している場合は、 […]