パラメータ名に hostname と入れればホスト名が取得できるし、 buffer と入れるとメモリ関連、 dir と入れればディレクトリ情報などが確認できる。 SHOW VARIABLES で表示しきれない長い値については、回避策として SELECT @@パラメータ名; で表示可能 データベーススキーマ一覧
□パフォーマンスチューニングのテクニック ・まずは状況把握 原因の推測のための情報収集 各種ツールの利用 ボトルネックをひとつづつ潰す ・パフォーマンス指標 スループット レスポンスタイム スケーラビリティ 上記の組み合わせ ・スロークエリログの分析 5.1からは0.x秒単位でログ指定が可能 頻繁に記録されるslowログから対応する mysqldumpslowで統計処理して見極め クエリアナライザの利用(高機能版mysqldumpslow) MySQL Enterprise Monitor + MySQL Proxy Proxyでクエリと統計を収集、Monitorで記録分析表示 ・EXPLAINで解析 遅いクエリをチェックしていく EXPLAIN typeでALL、index、index_subqueryが出たら注意 key_lenが大きすぎるとNG indexを使っていない場合にはつけて
mysqlを利用していて、indexをちゃんと張っているのにパフォーマンスが出ない。 explain でも type = ref / key = INDEX 等が表示されているのにすごくクエリーが遅かったりする。 思い切って index を消したら逆にパフォーマンスが改善した! why? データ件数が数万件を越えたあたりからパフォーマンスが劇的に下がった。 と、悩んでいたりしませんか? そんな悩みのひとつの解決策になってくれるかもしれません。 テストは vmplayer 上の debian etch で行います。 ホスト環境 intel Q6600 メモリ2Gの WindowsXPです。 クエリーをキャッシュされないように、クエリキャッシュを 0 にします。 /etc/mysql/my.cnf query_cache_size = 0 #no cahce debug swapで遅くなると困
こんにちは、サービス開発部の荒引 (@a_bicky) です。 突然ですが、RDBMS の既存のテーブルを見てみたら「何でこんなにインデックスだらけなの?」みたいな経験はありませんか?不要なインデックスは容量を圧迫したり、挿入が遅くなったりと良いことがありません。 そんなわけで、今回はレコードを検索するために必要なインデックスの基礎知識と、よく見かける不適切なインデックスについて解説します。クックパッドでは Rails のデータベースとして主に MySQL 5.6、MySQL のストレージエンジンとして主に InnoDB を使っているので、MySQL 5.6 の InnoDB について解説します。 InnoDB のインデックスに関する基礎知識 インデックスの構造 (B+ 木) InnoDB では B+ 木が使われています。B+ 木は次のような特徴を持った木構造です。 次数を b とすると、
1 Copyright 2008 Sun Microsystems inc The World’s Most Popular Open Source Database インデックスを使いこなす Yoshinori Matsunobu Senior MySQL Consultant Professional Services APAC Sun Microsystems Yoshinori.Matsunobu@sun.com 2 Copyright 2008 Sun Microsystems inc The World’s Most Popular Open Source Database 自己紹介 • 松信 嘉範 (まつのぶ よしのり) • 2006年9月からMySQLシニアコンサルタントとして勤務 – パフォーマンスチューニング、環境レビュー、MySQL Cluster、 ベストプラクティ
MySQLの組み込みプロファイラー SHOW PROFILEステートメントはMySQLサーバー組み込みのプロファイラーから情報を取り出すためのステートメントです。細かいことを言と、これが利用可能かどうかはビルドオプション(cmake -DENABLED_PROFILING=ON)で決まりますが、少なくともOracleが配布しているバイナリーではこのオプションが有効な状態でビルドされているため、ほとんどの環境で利用できるでしょう。 プロファイラーというと小難しく思えますが、「そのクエリーが実行されていた期間、どのStatus(SHOW PROCESSLISTで"State"と表示されているもの)にどのくらいの時間かかったか」を表示してくれるもので、セッション単位でオンラインに有効・無効を切り替えられるため、身構える必要は全くありません。まずはその内容を確認するため、試しに具体的なステートメン
こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。先日親知らずを抜歯した時、つらすぎたので MySQL の JOIN のことを考えて心の平静を保っていました。 サイボウズの製品のひとつである kintone はニーズに応じて自由に業務アプリのようなものを手軽に作ることができ、データの検索条件やソート条件も細かくカスタマイズ可能で、様々なレベルでのアクセス権も設定可能という非常に便利なツールです。 しかしその機能を支える裏側では複雑なクエリが発行され、MySQL に多大な負荷をかけています。サイボウズのクラウドには数十テラバイトに登る MySQL データがあり、数千万件オーダーのテーブルを複数 JOIN するクエリが毎秒のように実行されるという、エンジニア魂が滾る環境です。 現在サイボウズでは性能改善に力を入れており、僕もその業務に従事しています。例えば2018年
MySQLに限らず、プログラム実行時間を考えると 1.そこそこ大きいファイルを作業対象にすると、ハードディスクからの読みとりにも一定時間が掛かり、最近の大容量ハードディスクには、読みとりキャッシュが付いている。 つまり、読みとりキャッシュ内に残ってる限りは2回目以降の読みとり時間は早くなる。 別のアプリで同じディスク内の別の巨大ファイルを読み込んだりすると、読みとりキャッシュ内容が書き変わるので、またファイルアクセスに時間が取られてしまうかもしれません。 →マニュアル 「ディスク関連の問題」を参照してみてください http://dev.mysql.com/doc/refman/5.1/ja/disk-issues.html データ更新が頻繁だと、一つのファイルがハードディスク内で分散していることがあり、ファイルアクセスに時間が掛かる要因となります。デフラグもやっておきましょう。 2.大きな
※RDSは使っていません。 負荷を見てみる DBサーバーの負荷状況を見てみます。 当時の監視ツールの画像がないのですが、以下の状況でした。 LA(Load Average)が突き抜けている リクエスト数は「常識的に考えて」それほどでもない メモリの使用量にあまり変化がない swapはしていない ストレージ容量を結構食っている WEBサーバーから見れば、処理待ちのままプロセスが処理されていない典型的なパターンだったと思います。 DBサーバーとしては、LAに対し、メモリの使用量があっていないように思われました。 仮説 上記の状態から、仮説を立てます。 スロークエリ が頻発しているのではないか メモリ が正しく割り当てられていないのではないか 各種ログ の設定が適切ではないのではないか 仮説を検証することで、対策をしていきます。 設定を見直す 上記の仮説の設定は、MySQLの設定ファイルである「
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く