2. \こんにちは/ ● ● ● ● とある企業のDBA ● オラクれない ● ポスグれない ● マイエスキューエる その正体は ● 嫁の夫 ● せがれの父 日本 MySQL ユーザ会 (MyNA) のすべり担当 #mysql_jp でツッコミをいただけると幸い
MySQL 5.1からデフォルトで有効になっている便利な機能としてプロファイリングというものがある。MySQL 5.0でも利用出来たのだが、実験的な機能という位置づけであり、搭載されていたのはGPL版のMySQL Community Server限定だった。MySQL 5.1からは全てのエディションでプロファイリングを利用することができる。 プロファイリング機能を利用すると、クエリの状態(特に状態遷移やリソースの消費状況)を詳細に分析できるのでとても便利だ。MySQLエンジニア必携の機能といって良いだろう。というわけでプロファイリング機能の使い方を説明しよう。 MySQLサーバにログインしたら、まずは次のようにしてプロファイリングを有効にする。 mysql> SET profiling=1; すると、クエリの情報が記録されるようになる。次に、分析したいクエリを実行する。クエリはなんでもいい
SlowLogの設定 環境設定ファイル(Windowsではmy.ini,Linuxではmy.cnf)に次のような設定を加えるとSlowLogが有効になる。 log-slow-queries SlowLogの有効化(ログファイル名を指定可能) long-query-time=2 SlowLogに記録する処理時間の上限 log-long-format インデックスを使用しないSQL文の記録 long-query-timeパラメータは,SlowLogに記録するしきい値を秒単位で設定する。この場合には,2秒超える処理時間を費やしたSQL文を記録する。また,log-long-formatを指定すると,インデックスを使用しないSQL文もSlowLogに記録する。 SlowLogの確認 SlowLogが動作しているかどうかは,次のコマンドで確認できる。log_slow_queriesがONであれば有効と
統計情報を取る † 定量的な情報収集のススメ mysql> show global status; (5.0.2以上の場合) mysql> show status; (5.0.2未満の場合) ↑ ファイルオープン数の調整 † 高負荷なときに以下のコマンドを実行 $ mysqladmin -u root -p extended-status | grep Open Enter password: | Open_files | 515 | | Open_streams | 0 | | Open_tables | 256 | | Opened_tables | 45281 | Open_files, Open_tablesの数が多い場合は /etc/my.cnf の以下を調整。この値が大きすぎると「Error in accept: Too many open files」エラーが発生し、MyS
前回「第2回:負荷によるベンチマークを試す」の測定結果では、測定途中でmax_connectionsに達してしまい、計画していた測定を完了することができませんでした。そこでmax_connectionsを増やして、再度測定してみましょう。 max_connectionsを増やすには2通りの手段があります。まず「/etc/my.cnf」に設定を追記する方法です。設定値は450に変更します。
スロークエリログの出力フォーマット スロークエリログはデフォルトではログファイルに出力されます。log_outputをTABLEに設定すると、mysqlデータベースのslow_logテーブルに出力されます。カンマ区切りで「FILE,TABLE」と設定すると、slow_logテーブルとログファイルの両方に出力されます。なお、log_outputは一般ログ(General Log)とスロークエリログの両方に影響しますので注意してください。 slow_logテーブルはCSVストレージエンジンを利用しているため、CSV形式のデータファイルをコピーして各種のツールで集計も可能です。テーブルに出力している場合のmysqldumpslowに類似した集計は下記のSQL文で可能です。 図2 mysql.slow_logテーブルからmysqldumpslow同等の集計を行うSQL文 mysql> SELECT
max_connections 最大接続数は通常システムの要件から算出して行きます。システムとして想定される同時接続数を見積もり、そのうちデータベースまで到達するリクエストの比率、それぞれのデータベースでの処理時間を待ち行列理論に照らして考慮します。データベースに到達する同時リクエスト数が同じだとしても、処理時間が違う場合はデータベース内で同時に実行されている処理の件数も違ってくるため、同時接続数も違ってきます。注意すべき点は、システム開発の早い段階では見積もりの精度が高くないため、ある程度余裕を持たせた設計で始め、かつ段階的に見積もりの精度を高めていくことが求められることです。 接続が切断されるとMySQLサーバ内の接続スレッドも破棄されます。コネクションプーリング機能を使用していない環境では、接続による接続スレッドの生成と切断による切断スレッドの破棄が繰り返され、オーバーヘッドとして無
アメーバブログ(アメブロ)はサイバーエージェントが運営する無料のブログサービスである。同社のデータベースチームは急激に増加し続けるアクセスに対応し、パフォーマンスを維持するために、データベースの改善を続けてきたという。その経緯と現状が、MySQL ユーザコンファレンス 2008の場で紹介された。 アメブロにおけるデータベース改善の歴史 サービスを開始した2006年9月時点では、Active-Standby構成のOracle 10g 2台のみで、MySQLは使用していなかった。これで4億PV(ページビュー)を支えていたという。 その後、アクセスの増加に伴ってハードウェアを拡充し、現在はOracle 10g RAC 4台(Active3台-Standby1台)構成になり、MySQLはマスターに1台、スレイブに41台を導入しているとのこと。 このシステムは2006年10月からMySQLを導入し、
UNIX系OSではvmstatやiostat、sar、top、mpstatなどのコマンドラインツール、WindowsではリソースモニタがOSに付属しているほか、オープンソースのGUIツールとしてはNagiosやCacti, Hinemosなどが利用できます。 MySQLサーバ内部での処理状況の確認は、SHOW STATUSコマンドを基本として、MySQL WorkbenchのパフォーマンスレポートやMySQL Enterprise Monitorなどが利用できます。これらのコマンドやツールの詳細は別途解説いたします。 ベンチマークテスト 構築したシステムが要件を満たしていることを検証するためにベンチマークテストを行います。MySQLのサポートエンジニアで“漢(オトコ)のコンピュータ道”で知られる奥野氏は「テストをしないことはリスクがあるということです。つまり、ベンチマークテストをしない
パフォーマンススキーマとは パフォーマンススキーマはMySQL 5.5から実装された性能統計情報に関するメタデータを格納するスキーマです。MySQL 5.5ではメタデータ取得のオーバーヘッドが大きく、本番運用時に利用することは推奨していませんでしたが、MySQL 5.6ではオーバーヘッドが大幅に改善されデフォルトで有効となっています。 パフォーマンススキーマは性能統計情報を記録するストレージエンジンの一種として実装されており、performance_schemaスキーマのテーブルに格納された処理のレイテンシ(ピコ秒単位)やデータのバイト数、ソースでの位置、オブジェクトのデータなどに対してSQLでアクセス可能です。MySQLサーバのソースコード中にある“instrumentation point”(または“instrument”と表現される)にて「イベント」毎の処理時間や処理データ量
1時間以上かかっていたあるselect文の実行が、MySQLの設定を変更したら、2分に短縮できた。 tmp_table_sizeを32Mから300Mに変更。が、これだけでは設定が有効にならない。 max_heap_table_sizeを16Mから300Mに変更する。 たとえば select count(*) from ( select distinct ... ) a のようなselectのネストの場合、括弧内のselectの実行結果がテンポラリテーブルに作成される。このテンポラリテーブルはオンメモリに作成されるが、テンポラリテーブルのサイズがtmp_table_sizeより大きくなると、/tmpディレクトリ下にISAMファイルとして作成されるが、ISAMファイルへの処理が遅く、極端に処理時間が増大してしまう。 なので、tmp_table_sizeを大きくすればいいのだが、テンポラリテーブ
稼働中のMySQLサーバのパラメータ確認-SHOW VARIABLESコマンド SHOW VARIABLESコマンドでは現在のパラメータを確認できます。SHOW VARIABLESコマンドの出力内容はLIKEやWHEREで絞り込むこともできます。パラメータ名がわかっている場合には、「SELECT @@パラメータ名;」で値の確認も可能です。 図1 SHOW VAIRABLESコマンドの実行例 mysql> SHOW VARIABLES LIKE 'char%'; mysql> SHOW VARIABLES WHERE Value = 'ON'; mysql> SELECT @@character_set_server; ここでの注意すべきポイントが2点あります。 MySQLサーバ起動時の設定ではなく現在有効なパラメータが表示される デフォルトでは現在の接続で有効なパラメータが表示され、他の
【MySQLウォッチ】第25回 チューニングの指標,ベンチマークのノウハウ:ITpro チューニングの結果を確認するには,何かしらの指標が必要となる。「体感的に向上した」というのは,まったく当てにならない。正確に性能を把握してこそ,効率的なチューニングが行えるのだ。今回は,ベンチマークについて紹介する。 sql-bench, MyBenchを使ったベンチマーク方法と、MySQL Administratorによる状態監視方法の記事。 MySQLをどうやってチューニングしたらいいのか?という人には参考になる記事ですね。 ちなみにmybenchのサイトはこちら 以下の書籍も参考になります。 実践ハイパフォーマンスMySQL 価格: ¥ 3,780 売り上げランキング: 14,643 おすすめ度: 4.5 出荷予定: 通常24時間以内に発送 ジェレミ・D. ザウドニ デレク・J. ベリング Jer
概要 ドワンゴ社はユーザの多様なニーズに応えるため、数年前よりマイクロサービス化を推進している。それに伴いサービスリリースの早期化やコスト削減などといった課題を解決するべく、各サービスで利用可能なデータベースシステム基盤の構築を決定。従来使用していたMySQLのマスタ/スレーブ構成ではなく、MariaDB Galera Clusterを利用したマルチマスタ構成を新たに採用し、以前よりも高い可用性を担保しながら運用体制の効率化を実現した。 課題 マイクロサービス化に対応するため、データベース運用の効率化と更なる安定的な運用を目指す 解決策 MariaDB Galera Clusterを使用した新データベース基盤の構築 結果 ダウンタイムの大幅削減によりデータベースの安定した運用を実現 以前ではフェイルオーバ時に1時間以上かかっていたものが、Galera Clusterを利用したマルチマスタ構
MySQL を利用したアプリケーションを構築・運用している際に、パフォーマンスの悪い SQL を特定するための基本となる「スロークエリログ」について解説します。 スロークエリログとは? スロークエリログ (Slow query log) は、MySQL で出力できるログの種類の1つです。 SQL の実行時間が指定した時間よりもかかってしまった SQL を全て出力することができます。 これにより、アプリケーション構築時や本番運用時にパフォーマンスのボトルネックとなっている SQL を発見するのに大いに役に立ちます。 また設定のオプションとして log-queries-not-using-indexes というオプションがあり、このオプションを指定するとインデックスを使っていない SQL も全て出力するようにできます。 これにより、インデックスの設計し忘れ・設定し忘れを発見することもできます。
今回も前回に引き続き、ただいま受講中のMySQLトレーニングの実況中継(5日目最終日)。 いつも応援ありがとう! 【参考】 実践ハイパフォーマンスMySQL 今日のトレーニングは、MySQLのチューニング。 個人的には今回のトレーニング最大の目玉で、この日が来るのが待ち遠しかった! 今回も、実践に役立ちそうな技から、試験ぐらいでしか使わなそうな技まで、気になったものをトレーニングを受けながらリアルタイムに追記していくので、もし今日の分をまとめて見たいあなたは、18時以降にまたどうぞ。 MySQL付属のsql-benchは、単純なselectとinsertしかテストしてくれない。しかも実行するクエリーは、コード中にハードコーディングされているので、カスタマイズも面倒。 プリペアドステートメントは、セッション内だけで有効なので、セッション毎に登録してあげる必要がある。 mysql> prepa
オンラインの無料動画で学ぼう!yoku0825先生
ピノキヲ IT WikiMySQLのチューニングは主に2種類あります。 インストールしたままのMySQLは遅いです。。。 テーブルサイズが小さければOKですが、数百万レコード、数千万レコードを格納するテーブルだと、SELECTが遅くなります。でもチューニングをすれば、2倍〜10倍、あるいはもっと早くなることもあります。 チューニングのやりかたは、大きく分類すると下記の2種類に分かれます。 SQLのチューニング→テーブルを全検索しないように、インデックスを用いて効率の良いSQLに変更します MySQLのパラメータチューニング→メモリバッファを増やすことでディスクI/Oの回数を減らし、動作を早くします。 以下、チューニングの詳細をメモします。
MySQL 5.1からデフォルトで有効になっている便利な機能としてプロファイリングというものがある。MySQL 5.0でも利用出来たのだが、実験的な機能という位置づけであり、搭載されていたのはGPL版のMySQL Community Server限定だった。MySQL 5.1からは全てのエディションでプロファイリングを利用することができる。 プロファイリング機能を利用すると、クエリの状態(特に状態遷移やリソースの消費状況)を詳細に分析できるのでとても便利だ。MySQLエンジニア必携の機能といって良いだろう。というわけでプロファイリング機能の使い方を説明しよう。 MySQLサーバにログインしたら、まずは次のようにしてプロファイリングを有効にする。 mysql> SET profiling=1; すると、クエリの情報が記録されるようになる。次に、分析したいクエリを実行する。クエリはなんでもいい
2. 自己紹介 金子 健介 (Kensuke Kaneko) プログラマ @ ペパボ 刺身☆ブーメラン id:a666666 @kyanny 4. Maatkit とは MySQL 用のユーティリティ集 作者は実践ハイパフォーマンス MySQL の著者 なぜかエジプトっぽいロゴ Perl スクリプトなので読みやすい $ wc -l mk-* 127964 total ( 12 万行もあるけど)読みやすい 7. 使い方 $ mk-query-digest --fingerprints slow.log # Files: slow.log # Overall: 115 total, 12 unique, 0.00 QPS, 0.03x concurrency _____________ # total min max avg
今まであまり意識していなかったのですが、 とある案件でMySQLのサーバーでHDDのパーティションを切って運用しています。 その時に、負荷テストとして大量なレコードをテーブルに作成しようとした際に、 あっという間にHDDが100%になってしまい、SQLが実行できない現象が発生してしまいました(´;ω;`)ウッ… その時のエラー内容が次のようになります。 #126 - Incorrect key file for table '/tmp/#sql_448f_0.MYI'; try to MySQLがSQL実行時に一時的な作業ファイルとして作成するファイルみたいですが、 このファイルがあっという間にHDDを圧迫してしまい、SQLが落ちるという現象でした。 以下の手順でHDDの容量が少ない環境などで簡単に試すこと出来ます! ■テストテーブル作成 CREATE TABLE `tmp` ( `id`
MySQLTunerというMySQLをチューニングのアドバイスをしてくれるものがあるらしいので使ってみました! ■gitからのダウンロード用 https://github.com/rackerhacker/MySQLTuner-perl/ mysqltuner.pl を実行するだけ。 # git clone git://github.com/rackerhacker/MySQLTuner-perl.git # cd MySQLTuner-perl # perl mysqltuner.pl ■直接ダウンロード用 # wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl # chmod +x mysqltuner.pl # ./mysqltuner.pl ■実行結果 -------- Reco
MySQL 保守サポート、コンサルティング、チューニング、 MySQL 商用ライセンスのご購入はスマートスタイルにご相談ください。最適なソリューションを提供します。
MySQL version : 5.5.38 目次 前書き 遅いクエリの見つけ方 解決策の決定 チューニングの方法 クエリの改善 INDEX パーティション コマンドの大文字小文字 おわりに 1. 前書き こんにちは、入社1年目の紺野です。 入社後、予約TOP10チームにJOINしてから、MySQL関連の改修を任されることが結構ありました。大学ではPostgreSQLを習っていたのですが、実務として取り組むと、ただ受け身でやっている時よりも知識のUPDATEが早いですね。 今回は1年目の自分が取り組んできた、遅いクエリの見つけ方から改善までの手順と解決法をSELECTしましたので、記事として書かせて頂きます。 どうでもいい前置きはここまで本題に入りましょう。 2. 遅いクエリの見つけ方 MySQLにはスロークエリログという、結果が返ってくるのが遅いクエリをログとして残してくれる機能が備わっ
ピノキヲ IT WikiMySQLのチューニングは主に2種類あります。 インストールしたままのMySQLは遅いです。。。 テーブルサイズが小さければOKですが、数百万レコード、数千万レコードを格納するテーブルだと、SELECTが遅くなります。でもチューニングをすれば、2倍〜10倍、あるいはもっと早くなることもあります。 チューニングのやりかたは、大きく分類すると下記の2種類に分かれます。 SQLのチューニング→テーブルを全検索しないように、インデックスを用いて効率の良いSQLに変更します MySQLのパラメータチューニング→メモリバッファを増やすことでディスクI/Oの回数を減らし、動作を早くします。 以下、チューニングの詳細をメモします。
MovableType3.32-jaを使用したMovableTypeの学習を兼ねて、案件や業務に関する私的な記録や備忘録の作成を目的。 お問い合わせ・事業内容・取引実績などは、トップページhttp://www.cbss.jp/へ移動してください。 MySQLのチューニングは、多くのデータベース開発の場で必須の知識です。が、単にmy.cnf等で設定するパラメータのチューニングだけを考えていても、必ずしも良い結果を生むとは限りません。よりパフォーマンスの高い状態でMySQLを動作させるには、稼動させるサーバの状態や、メモリ管理そのものを知っていなければならないでしょう。 ご存知の通り、MySQLは登場当初から高速な動作で高い評価を得ています。もしMySQLのパフォーマンスが悪いと感じられるのであれば、一番最初から既に間違っていると考えて構いません。CPU/メモリ/ストレージなどサーバー能力の見
Abstract もはや使わない手が見つからないクラウド。 データベースも「設定を意識しなくてもよしなにやってくれる」時代になり「道具の使い方」で解決する場面が増えました。 「道具の作り方」まで知る必要はないかもしれませんが、「その道具がなぜ動くのか」の意味は知って置いて損はない。 0から1、100、10000を「作る人」に向けて、 - 「維持する人」 - 「成長させながら維持する人」 がいること、そして 「データベースは怖くないよ」 を伝えたい。 そこで今回、 - MySQLのmy.cnf の主要な項目全てを理解して設定 - デフォルトからどの程度パフォーマンスが上がるのかの解説 を通し「データベースは怖くない」に到るまでのプロセスをお話します。 同時に、5.5 から 5.7 に変更した場合の、項目の差分の解説もしよう…かと思いましたが 「設定から冗長化まで」をお話し、実運用を感じて欲し
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く