<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7661288799334918410</id><updated>2011-12-06T01:37:10.875+09:00</updated><title type='text'>ＤＢ改造屋雑記</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-4098506992735889270</id><published>2011-12-05T20:02:00.003+09:00</published><updated>2011-12-05T20:57:36.668+09:00</updated><title type='text'>転職等、状況のご報告</title><content type='html'>一部の関係者や、勘の鋭い方はお気づきだと思いますが、11月にPerconaを辞して、12月よりInnoDB teamの一員として働くこととなりました。XtraDB等Perconaの製品については少なくとも現職にある限りは、関与することは今後基本的にありません。&lt;br /&gt;&lt;br /&gt;XtraDBは私にとっては、InnoDBという優れたアーキテクチャの持つポテンシャルを引き出す手段を素早く積極的に世に問うための重要なチャネルでした。しかし利用者が増えるに連れ、利用者や会社にとっては製品としての位置づけが強くなってしまったようです。この立場の違いが、開発の方針のあらゆる面での意見の相違を生んだと思います。迅速な進歩を失ってしまっては、永続的な存在意義は無いと、例え現在満足していても、将来問題に直面したときに小手先で解決できることなどもう無いのです、先に手を打たなければ。体裁を気にして将来の継続的なメンテナンスコストを犠牲にするような実装は開発リソースが少ないのだからいくら顧客がお金を払うといってもやるべきではなかったと思います。顧客が直接お金を払って前に進む形式では未来の問題は解決できず、満足した時点で終了。つまり、XtraDBのInnoDBへの提案という役割は一定の成果は得たものの、もう終わったのだと判断しました。開発リソース豊富な本家の進歩に追いつくことはもうできないのではないかと思います。&lt;br /&gt;&lt;br /&gt;今回幸運にも、本家に参加する機会を得ました。今まで、ソースコードのみを教師に孤独に我流で腕を磨いてきましたが、これからは、自分よりもInnoDBに詳しい方々と、垣根無く議論し前へ進んでいけるのだと思うと、非常に期待と興奮を覚えます。皆さんも期待してもらっていいと思います。&lt;br /&gt;&lt;br /&gt;反骨精神の私を今でも突き動かすのは、確か６・７年前(？)、某社有名CEOが「１０年経とうがオープンソースのデータベースは商用のものには追いつくことは無い」という公式発言をしたことです（次の雇い主という説もあるが…）。多分タイムリミットはあと３・４年ですが納得のいく結論が得られるように頑張りますので、応援等宜しくお願いいたします。あ、その後もInnoDBの改善は続けますよ勿論。最早ライフワークですから。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-4098506992735889270?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/4098506992735889270/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2011/12/blog-post.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/4098506992735889270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/4098506992735889270'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2011/12/blog-post.html' title='転職等、状況のご報告'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-2101665527797883459</id><published>2011-10-07T12:00:00.008+09:00</published><updated>2011-10-07T16:00:55.271+09:00</updated><title type='text'>さらなる更新系処理の並列実行性の向上について</title><content type='html'>InnoDB性能フリークの皆様（日本語圏にいるかどうか解りませんが…）、ご無沙汰しております。MySQL-5.6では我々外野開発者が色々実装してきた改良・機能について人気の高い物・有効な物から順に積極的に取り込まれる様子が見て取れます。これはMySQLの開発コミュニティにとって素晴らしい進歩です。我々の活動が多くのユーザーに支持され、本家側からも無視できなくなり、何らかの進歩を阻害する要因が解決されたのではないでしょうか？感無量です。これで私も更に前へ進むことが出来るというものです。というわけで、今回は今まで誰も触れてこなかった問題に触れてみます。&lt;br /&gt;&lt;br /&gt;InnoDB の更新系処理のスケーラビリティは、私が過去に数多のRDBMSをベンチマークした経験上、商用RDBMSと比べてまだ明らかに低い印象を受けます。この記事を読むような人は勿論InnoDBのmutex/rw_lockの競合状態の確認はできるのでもう知ってると思いますが（飛ばします^^;）、index-&amp;gt;lock の競合です。ご存知の通りInnoDBのテーブルは主キーのB-Tree構造であるので、この競合はすべてのテーブル／インデックスに当てはまります。index-&amp;gt;lock の排他ロックはB-Tree構造が変更されるかも知れない場合に確保されます。leafブロックはblock-&amp;gt;lockで排他制御するのですが、root/branchブロックは纏めて一個のindex-&amp;gt;lockで代表させています。そして、それらのロックは&lt;span style="font-style: italic;"&gt;トランザクションの一部であるミニトランザクション終了まで&lt;/span&gt;（修正しました：10/7 16:00）確保されます。例えば、３段B-Treeにleafブロックを１個追加するような処理であってもindex全体がロックされてしまい、その間、関係ない他のbranchブロックの先への処理が全くできないのです。&lt;br /&gt;&lt;br /&gt;厳密に言うと、境界時の多少の例外処理はありますが、leafブロックを１個追加する場合は基本的にはそのブロックへのポインタが十分収まる場合には、一つ上の階層のbranchブロックさえロックできていればそれが最小限のロックなのです（説明用に他の細かい事情は大幅に省略）。とにかく単純に考えても最適化したら効果大きそうでしょう？&lt;br /&gt;&lt;br /&gt;で、先月やってみました。先ず、5.5.xで。しかし、直ぐにkernel_mutexの競合に阻まれました。row/tableロックの管理のための取得が特に多い模様でした。5.6.xではkernel_mutexは機能毎に分割されているのでもう少し効果は大きいはずと考え、次は5.6.2で。今度はピーク性能は明らかに上がるのに多接続時の性能が大幅ダウン。私がカンファレンス等で長年説明していますが、競合箇所が１カ所でも残っていると、他の競合を解決すればするほど残されたその一カ所に集中し、見た目の性能は下がってしまうのです。これを進歩と捉えられない人は前に進めないのです。これは進歩！（リリースはできないですが…）&lt;br /&gt;&lt;br /&gt;さて次の競合はやはり、kernel_mutex(~5.5)から派生しているlock_sys-&amp;gt;mutex(5.6~)です。今週、さっくりspace_id(テーブルスペースのID)をキーに分割してみましたら、見事な結果が得られました。tpc-c系の負荷で32CPU以上までスケールしているように見えます。まぁ、その分、過多接続の性能は少し下がっているかも知れませんが（次の競合で）。まだデバッグ用のコードをまだ全く書いていない（UNIV_DEBUGでは動作しない）状態なのでリリースにはまだ遠いですが性能は大きく変わることは無いと思います。デッドロック検出関係が少し不安ですが、思ったよりも今動いてるので多分大丈夫でしょう。&lt;br /&gt;&lt;br /&gt;…数字？出しませんよ。性能フリークなら、性能は自分で試す癖をつけましょう。私も他人の結果は信用しないのです、大抵分析不足なので。最悪の場合、プロモーション用に極端なケースのみが切り取られていたりします。&lt;br /&gt;&lt;br /&gt;実験用。試してwktkするためだけのパッチセットです。&lt;br /&gt;https://code.launchpad.net/~yasufumi-kinoshita/percona-server/5.6-xtradb-performance-alpha&lt;br /&gt;まだ、5.6.2用です。でもノーマルの5.6.2と比較して効果を試すには十分かと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;その他気づいたこととしては、query_cache絡みの処理がスケーラビリティを阻害しているので切りました。query_cache_size = 0 だけでは多接続時に重く、完全に切れていないようなので、明示的に &lt;span style="font-weight: bold;"&gt;query_cache_type = OFF&lt;/span&gt; とすることで解決しました。&lt;br /&gt;&lt;br /&gt;次の競合は、InnoDB側では無いかも知れません。有効にすると結構重くなってしまうので好きではないのですが（さらにそのせいで「電子顕微鏡のジレンマ」に近い問題もあるかもしれない）、performance_schema&lt;br /&gt;で調べてみたところ、'wait/synch/mutex/sql/LOCK_open' みたいです、２位は 'wait/synch/mutex/innodb/log_sys_mutex'。ちなみに開発者が解決すべき競合は SUM_TIMER_WAIT 順で見るのが正しいと思います。log_sys-&amp;gt;mutex つまり、トランザクションログのシリアライズ絡みの排他処理が見えるところまで来ました。かなり更新系処理のスケーラビリティが理想に近づいたと思います。次は…mysqld側か…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-2101665527797883459?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/2101665527797883459/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2011/10/blog-post.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/2101665527797883459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/2101665527797883459'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2011/10/blog-post.html' title='さらなる更新系処理の並列実行性の向上について'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-7817654078230766885</id><published>2011-04-15T00:15:00.003+09:00</published><updated>2011-04-15T01:21:14.933+09:00</updated><title type='text'>頂いた件の御挨拶</title><content type='html'>（読者も少ないと思うし、日本語なので、独り言的なプライベートな感じですが。）&lt;br /&gt;&lt;br /&gt;InnoDBに惚れ込み、その伝導のためにInnoDBのポテンシャルを可能な限り引き出す。それがこの５、６年の活動の根底にありました。その内のCPUスケーラビリティの問題を解析するための集大成とも言える（個人的に）セッションをMySQL CE 2010 (前回) で持たせて頂きましたが、一部の突出したユーザー極数人を除いては反応はあまり良くなかったのを覚えています。なので、自分の活動が一般のユーザーに分かる形で評価されることは無く、これは陽のあたらない縁の下の闇家業のようなものなのだと感じていたたところです。この一年は性能改善の進歩はあるのですが、一般ユーザーに説明すべき新しい知見は特に得られていなかったので、プライベートの問題解決を優先して MySQL CE 2011 の参加は見送っていました。&lt;br /&gt;&lt;br /&gt;そのような状況下で、賞を頂いた報を受け、素直に驚き喜んでいます。&lt;br /&gt;&lt;br /&gt;これ以上活動を続けることが実はあまり誰の役にも立ってないのではないか、という疑心暗鬼な状況は解消されました。先へ進むGOサインを頂いたと受け取っています。&lt;br /&gt;&lt;br /&gt;オープンソースの醍醐味は、私のような、多くの外野の開発者がフットワーク軽く誰の承認も無く個人のやり方で問題解決を試み、公開することができることだと思います。&lt;br /&gt;&lt;br /&gt;そんな外野の私を支持してくれる、雇い主のPercona社、&lt;br /&gt;そしてFaceBook社、RightNow社を筆頭に会社の最深部（？）の私に届くほど困難な仕事をいつも依頼してくれる超エキスパートユーザーの方々、&lt;br /&gt;さらにすべてのXtraDBのユーザーに感謝します。&lt;br /&gt;&lt;br /&gt;むむむ。全員日本語は通じないかな？日本じゃ誰もXtraDB使っていないかもしれないし…&lt;br /&gt;では、こっそり心の中で感謝しています。:-)&lt;br /&gt;&lt;br /&gt;外野開発をビジネス的に支援してくれるユーザーがいる限り、外野開発者が欲をかいてそれを裏切らない限り、オープンソースソフトウェアはオープンソースソフトウェアとして死んでしまうことは無いと確信しています。大丈夫。これで、まだ何年でも闘えそうです。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;※SSDも大体分かってきたので、次はHandlerSocket向けのチューニングとかにも手を付けてみたいのですが、ベンチマークソフトが無いので先ずははそこからです。誰か作ってくれないかな…。目下、余力が無いのですよ＾＾；&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-7817654078230766885?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/7817654078230766885/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2011/04/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/7817654078230766885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/7817654078230766885'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2011/04/blog-post.html' title='頂いた件の御挨拶'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-3880671988035618156</id><published>2011-02-22T10:49:00.002+09:00</published><updated>2011-02-22T10:59:53.502+09:00</updated><title type='text'>S4だけど意外に重要なバグ</title><content type='html'>性能関係情報（特にベンチマーク結果に影響がありそうなもの）です。&lt;br /&gt;&lt;br /&gt;以前から、ベンチマーク中のInnoDBのIOに多少の違和感（引っかかり？）を感じていたのですが、そんなに影響も大きくないので私は放っていたのですが（優先順位の問題です^^;）、多分 FaceBook の Mark Callaghan が発見したこれが原因かも知れません。流石 Mark Callaghan。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bugs.mysql.com/56433"&gt;Auto-extension of InnoDB files (blocks the other IO)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;とりあえずそこに修正案を投稿しておきました。(fix_suggestion_56433.patch)&lt;br /&gt;これで、InnoDB の IO はよりスムーズになるはずです。file_per_table が有効でINSERTが多い場合は結構影響が大きかったはず。&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-3880671988035618156?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/3880671988035618156/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2011/02/s4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3880671988035618156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3880671988035618156'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2011/02/s4.html' title='S4だけど意外に重要なバグ'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-3502816915048659141</id><published>2011-01-12T11:36:00.002+09:00</published><updated>2011-01-12T12:08:20.848+09:00</updated><title type='text'>性能調査は続く。。。</title><content type='html'>SSD向けのチューニングは一段落ついたので、今回は別の話題です。&lt;br /&gt;&lt;br /&gt;チーム内部では5.5版のXtraDBが色々ベンチマークされていて、その中で興味深い事象が発生しました。&lt;br /&gt;&lt;br /&gt;ストレージはRAID10。SSDではないです。&lt;br /&gt;書き込みも読み込みも両方のIOが激しくなる条件でベンチマークすると、書き込みが疎かになって modified_age が肥大化して同期flushを伴うチェックポイントが頻繁に発生してスループットが安定しないと言うのです。。。&lt;br /&gt;&lt;br /&gt;「そんなのは、XtraDB側の問題じゃなくて OS/ハード の問題だろ！」&lt;br /&gt;とは思ったのですが、読み込みIOのスループットを制限するパッチを作ってみました。modified_ageが大きくなったときに指定された割合で過去の最大スループットをベースに制限します。。。。&lt;br /&gt;&lt;br /&gt;なかなか興味深いパッチができたのですが、その前に先方では解決した模様でした。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;件の事象は xfs 固有のもので、ext4 では起こらない&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;と言うのです。&lt;br /&gt;というわけで、とりあえず&lt;span style="font-weight: bold;"&gt;「xfs を使わない」&lt;/span&gt;で解決です。&lt;br /&gt;&lt;br /&gt;xfs には何かRDBMS向きではない部分が有るのかも知れません。&lt;br /&gt;世間で行われているベンチマークは単純なものが多く、RDBMSのような各IOに意味があって依存関係があるような条件では成されていないということでしょうか。&lt;br /&gt;やはりベンチマークは自分でやるまで信用できないものですね。気をつけましょう。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RDBMS性能フリークは xfs に気をつけろ。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;というわけで、今回は新機能は無し。パッチはとりあえずお蔵入りです。。。&lt;br /&gt;&lt;br /&gt;※ディストリビューションは CentOS5.5 です。私のサーバーじゃないので、私の趣味ではありません。xfs が古かったりするのかも。nobarrierは使用してます。そのせいではありません。&lt;br /&gt;&lt;br /&gt;※IO read スループット制限パッチは DBインスタンス/VM が１個のサーバーに相乗りの場合は有効かも。要望が有れば復活もあるかも。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-3502816915048659141?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/3502816915048659141/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2011/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3502816915048659141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3502816915048659141'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2011/01/blog-post.html' title='性能調査は続く。。。'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-4909890761318606958</id><published>2010-12-09T19:42:00.004+09:00</published><updated>2010-12-13T22:15:04.159+09:00</updated><title type='text'>XtraDB 5.5版 性能調整中 （続報）</title><content type='html'>SSD 更新系処理の性能が明らかに上がったようなので、続報。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SSD で更新系が多い処理で高性能を出すコツ（追加分）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;７．innodb_log_block_size (今日作った) をデバイスのブロックサイズに合わせて拡大する。&lt;br /&gt;&lt;br /&gt;ご存知とは思いますが（？） InnoDB のトランザクションログの書き込みは 512 バイト単位で行われます。しかし、最近の記録デバイスはそれより大きい記録単位を持っていることが多くなってきました(1K〜4Kバイトくらい)。この時デフォルトの512バイトでは書き込みIOの効率が悪くなっていたようです。&lt;br /&gt;例えば、4Kバイト 単位のデバイスに 512 バイトの書き込みをする場合、他の部分の内容を保持するために、4Kバイト の読み込みの後に 該当個所 512バイト 上書きして、4Kバイト書き込むという動作が必要になります。たとえ、アプリケーションの側からは見えなくても、ドライバやハードウェアの階層でこのような処理が必要となります。4Kバイト 単位IOのデバイスには log_block_size も4KBにするのが最適です。単純に 4KB の読み込みが減るのでトランザクションログ書き込みの効率が上がります。(特に innodb_flush_log_at_trx_commit = 1 の場合は各トランザクションが書き込みを待つため性能が顕著に違うようです。)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;このオプションも5.5ベースのXtraDBには実装する予定です。&lt;br /&gt;「もう待てない。是非試したい！」という諸兄は、&lt;br /&gt;bzr branch &lt;span class="branch-url"&gt;lp:~percona-dev/percona-server/5.5.7&lt;br /&gt;で開発中バージョン（まだ私の持ち分のパッチだけ(XtraDB + α)）が取得できるので、ビルドして試してみてください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;追記：12月13日&gt;&lt;br /&gt;innodb_adaptive_checkpoint=keep_average と innodb_log_block_size を 5.1系にバックポートしました。次のリリースで多分使えるはずです。&lt;br /&gt;&lt;br /&gt;しかし、、、動作確認がてら、BP十分更新系 の負荷をかけたら 5.1 の方が 5.5 よりも 3%くらい速いような。 5.5 はノーマルでは 5.1 より良いのかも知れないが、潜在能力は下がっている。。。ということかも知れない。&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-4909890761318606958?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/4909890761318606958/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2010/12/xtradb-55.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/4909890761318606958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/4909890761318606958'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2010/12/xtradb-55.html' title='XtraDB 5.5版 性能調整中 （続報）'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-2661103372979447049</id><published>2010-11-30T19:35:00.005+09:00</published><updated>2010-12-01T17:51:36.133+09:00</updated><title type='text'>XtraDB 5.5版 性能調整中</title><content type='html'>色々ありましたが、最近、やっと 5.5.x 版のXtraDBを開発中で性能を確認しています。&lt;br /&gt;SSD で試したりもしているのですが、今まで気にしていなかったことが意外に重要なことに色々気づいたので覚え書き。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SSD で更新系が多い処理で高性能を出すコツ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;１．Linux native AIO を利用する。 (5.5 共通)&lt;br /&gt;&lt;br /&gt;SSDはIOが速いので（？）、今まで通りInnoDB内部のaioを使うとちょっと非効率で、運が悪いと暫く処理されないリクエストが出てくる可能性がありそうです。5.5 ではもう内部のaioにはパッチを当てずにデフォルト通り Linux native AIO を使うことを推奨します。使えない環境の人は、なんとか使えるようにしてからビルドしてください。。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;２．圧縮機能を利用しない。&lt;br /&gt;&lt;br /&gt;データページの圧縮機能はSSDの折角速いIOレスポンスを殺します。もしもデータの容量がSSDに入りきらないほど大きく、IOも多いと予想されるなら、普通にRAIDを使った方が速いことが多いでしょう。圧縮機能は結局CPUスケールも悪いので。XtraDBでは、圧縮機能を利用した場合にはいくつかのmutex最適化ができなくなるためそれらは無効になります。（元々InnoDB内部でも block-&gt;mutex に当たる物は 全体で 1個なので、CPUスケールは諦めましょう）。この機能は性能を大幅に犠牲にしてディスク上／メモリ上の格納効率を上げる物です。性能を気にするなら利用しないでください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;３．innodb_buffer_pool_instances = 1 。増やさない。&lt;br /&gt;&lt;br /&gt;この5.5からInnoDBに実装された buffer pool の個数を増やす機能は、残念ながら現在のところは圧縮機能のCPUスケールを増やすために苦し紛れに実装されたものでしか無いようです。増やすと、buffer pool 毎の last modified age 制御を行う必要があるわけですが、独立して扱うことはできないので flush 制御が増やした分だけ不正確になって更新系のスループットが安定しないようです。上記"２．"で 圧縮機能 は使わないわけですからこのパラメータには触らない方がいいでしょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;４．innodb_flush_neighbor_pages = 0 (XtraDB)&lt;span style="font-weight: bold;"&gt;(SSD限定)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SSDはランダムアクセスのコストが無いので、纏め書きは無駄なだけです。そのとき、最も書き出す必要がある物を選ばないと（最も古い更新を含むblock）、書き込みIOのスループットを last modified lsn を進めることに効率良く利用することができません。これが意外に重要で、これをやらないと flush 量の見積もりが狂うので、一部の adaptive_[flushing/checkpoint] で長時間のスループットが安定しないようです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;５．innodb_read_ahead = none (XtraDB)&lt;span style="font-weight: bold;"&gt;(SSD限定)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;読み込みも書き込み同様、纏め読みの意味は少ないです。SSDの読み込みIOは十分速いので、先読みの必要はないでしょう。折角 buffer pool に確保している block を無駄に捨てないように無効にしたほうがいいでしょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;６．innodb_adaptive_checkpoint = keep_average (先週新しく作ってみた。5.5版のXtraDBから実装予定)&lt;br /&gt;&lt;br /&gt;新しい方式を作ってみました。自分がSSDで試している限りは他のどの方法よりも最適なスループットに速く落ち着きます。今の"estimate"よりも動作が軽く、flush量もソフトなので、5.5系ではこれをデフォルトにしようを考えています。計算する対象は InnoDB本体の adaptive_flushing と似てるのですが、単位時間当たりの動作回数を増やして細かく制御するようにして、他の flush アクティビティの量も正確に割り出して無駄な flush も抑制します。某所で評判がよければ、5.1系にもバックポートすることになると思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;と、いうわけで、&lt;br /&gt;近々 5.5系ベース のXtraDBを出すと思います。&lt;br /&gt;性能フリークの方々はお楽しみに！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;追記）&lt;br /&gt;あと、SSDではシーケンシャルアクセスの利点が無いので、&lt;span style="font-weight: bold;"&gt;doublewrite_bufferの影響が如実に出ます。&lt;/span&gt;（なぜならデータページの書く量が倍になるわけだから。。。）&lt;br /&gt;イヤなら無効にしましょう。もしくは innodb_doublewrite_file (XtraDBのオプション) で別の書き込みの速いデバイスに doublewrite_buffer 専用ファイルを置きます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-2661103372979447049?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/2661103372979447049/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2010/11/xtradb-55.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/2661103372979447049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/2661103372979447049'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2010/11/xtradb-55.html' title='XtraDB 5.5版 性能調整中'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-9079207031516572529</id><published>2009-12-31T04:43:00.003+09:00</published><updated>2009-12-31T04:50:36.645+09:00</updated><title type='text'>Save MySQL!</title><content type='html'>バラバラにECにメールを送っても、効果があるのか疑問でしたが、こんなサイトが立ち上がったようです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://helpmysql.org/"&gt;http://helpmysql.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;各国語のページがあり、日本語も一応あるので、『英語はちょっと…』という方も大丈夫。&lt;br /&gt;是非、主旨をご理解の上ご協力できる方は署名をお願いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-9079207031516572529?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/9079207031516572529/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/12/save-mysql.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/9079207031516572529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/9079207031516572529'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/12/save-mysql.html' title='Save MySQL!'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-3925356333581501630</id><published>2009-12-18T11:44:00.003+09:00</published><updated>2009-12-18T11:57:15.104+09:00</updated><title type='text'>XtraDB １周年</title><content type='html'>そういえば、XtraDBのリポジトリにcommitしだしてから先日丁度１周年になりましたので、&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;XtraDB１周年&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;ということになりました。「冒険家」の少ない日本では残念ながら効果を実感されているユーザーは少ないかも知れませんが、いつの日か急に吃驚してもらえるように来年も磨き続けていきます。&lt;br /&gt;&lt;br /&gt;Plugin-1.0.6 ベースのXtraDBの調整は現在ほぼ終わっていて、テストが済み次第リリースされると思います。お楽しみに！&lt;br /&gt;とはいえ、更新をサボっているうちに紹介すべき小ネタ新機能も溜まってきましたね。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-3925356333581501630?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/3925356333581501630/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/12/xradb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3925356333581501630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3925356333581501630'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/12/xradb.html' title='XtraDB １周年'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-5274568261047943188</id><published>2009-11-06T17:34:00.002+09:00</published><updated>2009-11-06T17:46:27.164+09:00</updated><title type='text'>XtraBackup Windows版</title><content type='html'>今回は、速報なので短いです。&lt;br /&gt;&lt;br /&gt;「Linuxだけでたまたま動いていた感」のあるXtraBackupですが、私がいろいろ直しているうちに、最新revisionはWindowsでも動くようになったそうです！次のリリースではWindows版も出てくると思います。乞うご期待！！&lt;br /&gt;&lt;br /&gt;「そうです」というのは、私はWindowsの開発環境を持っていないし良く分からないので、寄せられたスタックトレースだけを頼りに気合いで直しています。しかし、それで良く動いたものです。。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-5274568261047943188?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/5274568261047943188/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/11/xtrabackup-windows.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/5274568261047943188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/5274568261047943188'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/11/xtrabackup-windows.html' title='XtraBackup Windows版'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-5451654090115871742</id><published>2009-10-09T01:26:00.004+09:00</published><updated>2009-10-09T01:55:37.173+09:00</updated><title type='text'>InnoDBの超高負荷更新処理安定性</title><content type='html'>最近は沢山CPUコアのある高速なサーバーとか高回転数のHDDが沢山付いたRAIDストレージとか、もの凄く更新系の負荷がかかるベンチマーク(「db_STRESS」 by Dimitriさん)とかがあるので、InnoDBの構成の更新系での様々な限界が見えてきています。&lt;br /&gt;&lt;br /&gt;まぁ、現実的にそのような限界を突破する必要のあるシステムがあるかどうかは判りませんが、将来のためにも色々アイデアを加えてXtraDBを作成してきました。今、大幅な変更無しに実装できる範囲のオプションが揃ってきたので高負荷更新系処理のチューニングを&lt;span style="font-weight: bold;"&gt;XtraDBベース&lt;/span&gt;で一旦書き出してみます。&lt;br /&gt;&lt;br /&gt;今回もサクサクとポイントだけ。&lt;br /&gt;（IOスレッドを増やす　とか、他でも語られている既知のものは省略します。）&lt;br /&gt;&lt;br /&gt;今回のチューニングの方針は、 &lt;span style="font-weight: bold;"&gt;「mutexやrw_lockなどの競合をできるだけ避ける」&lt;/span&gt; ということと &lt;span style="font-weight: bold;"&gt;「あまり沢山溜めてはイケナイものを溜め込まない」&lt;/span&gt; ということです。&lt;br /&gt;&lt;br /&gt;まず、最大スループットを上げるために、更新系で競合を回避するポイントをいくつか。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;"rseg-&gt;mutex" の競合：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;ロールバックセグメントを増やしましょう。XtraDB には、&lt;span style="font-weight: bold;"&gt;innodb_extra_rsegments&lt;/span&gt; というオプションがあり、InnoDBの初期化の時に限り、指定数の追加ロールバックセグメントを作成できます。information_schema の INNODB_RSEG ビューで状況確認可能です。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;"index-&gt;lock" の競合：&lt;/span&gt;&lt;br /&gt;その索引全体に対するロックです。5.1のパーティション機能で分割することにより回避できるかも知れません。表定義時に &lt;span style="font-weight: bold;"&gt;"PARTITION BY HASH(xxxx) PARTITIONS 16"&lt;/span&gt; の様にします。db_STRESSの場合、パーティション化するのは HISTORY 表のみで良いでしょう。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;"dict_operation_lock" の競合：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;パーティションを利用すると多く発生するようです。tablespaceの空き領域を算出する処理がパーティション分増えてしまうのでしょうか。今回は空き領域表示の正確性よりも性能が大事なので、切ってしまいましょう（ぁ）。XtraDBの次バージョンで &lt;span style="font-weight: bold;"&gt;innodb_stats_update_need_lock&lt;/span&gt; に &lt;span style="font-weight: bold;"&gt;0&lt;/span&gt; を指定しましょう。動的パラメータなので、空き領域を正確に知りたいときは &lt;span style="font-weight: bold;"&gt;1&lt;/span&gt; に戻せます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上で db_STRESS のRW=1のスループットがかなり上がったと思います（…）。&lt;br /&gt;&lt;br /&gt;あ、はい。どうやって競合を確認するか、ですね？&lt;br /&gt;以前何処かでお話ししたかもしれませんが、少々乱暴な判断法ですが、SHOW INNODB STATUS を何回か実行して、SEMAPHORE セクションに沢山出てくる行を見て、ソースと照らし合わせて何の競合か判断します。結構、的を射た結論が得られます。&lt;br /&gt;&lt;br /&gt;さて次はそのスループットを維持／安定化することを考えます。&lt;br /&gt;&lt;br /&gt;忘れられがちなポイントを３つ挙げます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;古いダーティブロックを溜めすぎない&lt;/span&gt;：&lt;/span&gt;&lt;br /&gt;トランザクションログの許容量ぶんよりも古い更新はflushしないままにはしておけません。なので大量に溜め込んでいると、ある時突然大量のデータブロック書き込みが発生する場合があります。普段からコツコツ書き出して減らしてバランスを取る必要があります。&lt;br /&gt;Plugin-1.0.4 から追加された &lt;span style="font-weight: bold;"&gt;innodb_adaptive_flushing&lt;/span&gt; かそれともこれを無効化して、XtraDB の "&lt;span style="font-weight: bold;"&gt;innodb_adaptive_checkpoint = estimate&lt;/span&gt;" を指定すると適切な量の書き出しをコンスタントにするようになります。どちらのオプションが最適かは、サーバーの性能と処理内容とその他設定のバランスに依存するようですので、試してみてください。&lt;br /&gt;XtraDBだと SHOW INNODB STATUS の出力の LOGセクション に Max checkpoint age と Modified age が表示されるので容易に確認できます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;insert bufferを溜めすぎない：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;InnoDBは主キー以外の索引列に対する変更は、insert bufferに挿入して整合性を取りながら、後で実際の変更を実施します。しかし、InnoDBは insert buffer が buffer pool の半分の大きさまで肥大化しないと本気で処理しないようです。XtraDB のオプション &lt;span style="font-weight: bold;"&gt;innodb_ibuf_active_contract = 1&lt;/span&gt; でいつも本気で insert buffer を減らそうとします。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;history listを溜めすぎない：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;これが起こるのは相当更新の激しい処理です。ロールバックセグメントの中身に対する後処理が新しくエントリを発生するスピードに追いつかずに肥大化した状態かと思われます。ロールバックセグメントが巨大化してしまうと、処理が重くなります。&lt;br /&gt;その&lt;span style="font-weight: bold;"&gt;purge&lt;/span&gt;と言う後処理を専任で実行するスレッドをつくると言うアイデアもありますが、db_STRESS は1CPUのpurge threadではその他CPU全ての更新処理は受け止めきれないようです。&lt;br /&gt;XtraDBの次のバージョンでは、このpurge threadにさらに子分のスレッドをつけて"purge力"を上げることができます。例えば&lt;span style="font-weight: bold;"&gt; innodb_use_purge_thread = 4&lt;/span&gt; の様な感じで 親分1+子分3 の構成でpurgeするようになります。(この設定で16コアのマシン上の32セッションの並列処理に対応できました。)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;苦し紛れの innodb_max_purge_lag 指定&lt;/span&gt;はもう必要無くなるのではないでしょうか？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上です。&lt;br /&gt;最後のpurge threadの効果を中心とした実際のデータは、近いうちに mysqlperformanceblog で見ることができると思います。&lt;br /&gt;&lt;br /&gt;では、MySQLマニアの皆さんも快適なベンチマークライフを！&lt;br /&gt;（検証用に急に良いマシンを借りれてしまったときに失敗せぬように！）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-5451654090115871742?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/5451654090115871742/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/10/innodb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/5451654090115871742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/5451654090115871742'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/10/innodb.html' title='InnoDBの超高負荷更新処理安定性'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-1049158116812072610</id><published>2009-09-09T19:11:00.002+09:00</published><updated>2009-10-20T17:57:57.908+09:00</updated><title type='text'>【注意】PowerPCのマルチプロセッサとInnoDB</title><content type='html'>多分、関係ある人にはクリティカルな内容なので、急いで報告します。&lt;br /&gt;&lt;br /&gt;ここ２週間くらい、とある案件で頭を悩ませていました。&lt;br /&gt;POWER5 の 8コア構成の IBM のサーバ(Linux)でMySQL(InnoDB)を利用すると、どのバージョンでも（ビルトインInnoDBでも、InnoDB Pluginでも、GCC atomic builtin を使わなくても）しばらくするとハングアップ／クラッシュするそうなのです。&lt;br /&gt;&lt;br /&gt;紆余曲折ありましたが、どうも自分の仮説が正しそう（作ったパッチが効果ある模様）なので、先ほどバグレポートを報告しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bugs.mysql.com/bug.php?id=47213"&gt;All InnoDB (builtin and plugin) is unstable at PowerPC SMP server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;簡単に言うと、InnoDBのコードはIntel CPUのSMPの仕様に依存した作りになっています。Intel系CPUのSMPでは、メモリへの書き込みは他のCPUのキャッシュにも自動的に影響して一貫性を保つのですが、PowerPCではCPU間のキャッシュの一貫性確保を明示的に行う必要があるのです。&lt;br /&gt;&lt;br /&gt;結論から言うと、残念ながら、PowerPCのマルチプロセッサ構成でInnoDBを利用するのは危険。ということになります。&lt;br /&gt;&lt;br /&gt;もう引き下がれない人や、既にハングアップに悩まされている人は、とりあえず当該レポートにアップロードしておいたパッチで InnoDB Plugin 1.0.3 を使ってみてください。ハングアップの可能性はかなり減る筈です。&lt;br /&gt;&lt;br /&gt;-------&lt;br /&gt;(2009/10/9 追記)&lt;br /&gt;大幅に改善したものの、ハングアップの可能性がまだあるようです。&lt;br /&gt;うーむ、__sync_synchronize() は sync になるようだが、store に対する memory barrier にはなってないのかも。&lt;br /&gt;該当個所を asm volatile ("isync") に書き換えてみるか…（独り言）&lt;br /&gt;&lt;br /&gt;-------&lt;br /&gt;(2009/10/20 追記)&lt;br /&gt;現在のパッチを同じバグレポートにアップロードしておきました。&lt;br /&gt;動作は今のところ大丈夫そうです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-1049158116812072610?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/1049158116812072610/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/09/powerpcinnodb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/1049158116812072610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/1049158116812072610'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/09/powerpcinnodb.html' title='【注意】PowerPCのマルチプロセッサとInnoDB'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-888577976983304983</id><published>2009-08-09T11:10:00.000+09:00</published><updated>2009-08-09T12:45:08.681+09:00</updated><title type='text'>InnoDBの性能改善版</title><content type='html'>しばらく間があいてしまいました。&lt;br /&gt;&lt;br /&gt;今回は、地味な話で少し遅れてしまった話題ですが、InnoDBの性能改善についてです。2009.4のMySQL UCの時点では「MySQL5.4よりも遅いんじゃないか？」と言われていた、XtraDB、5.0-highperf ですが、色々世界の皆様のパッチを参考に（いいとこ取り）して、且つ自分のパッチ（split_buf_pool_mutex）はXtraDBベースのlatching orderでちゃんと行儀良く（デバッグモードもちゃんと動作させる）書き直してデバッグして、環境（とチューニング&lt;span style="font-weight: bold;"&gt;［大事］&lt;/span&gt;）によっては5.4よりも多少良い性能が出るようになっているはずです。(例 &lt;a ca_clicked="0" href="http://www.mysqlperformanceblog.com/2009/07/14/performance-improvements-in-percona-5-0-83-and-xtradb/" rel="bookmark"&gt;Performance improvements in Percona 5.0.83 and XtraDB&lt;/a&gt;　：　CPUコア数、RAIDの並列性能、データ量、処理内容、チューニング等々で性能差は全く変わるとは思います。)&lt;br /&gt;&lt;br /&gt;さて、一部の方から「某Googleの&lt;a href="http://code.google.com/p/google-mysql-tools/source/browse/trunk/mysql-patches/all.v4-mysql-5.0.37.patch.gz"&gt;v4パッチ&lt;/a&gt;は移植しないのか？」の質問を偶にいただくのですが、個人的にはGoogleパッチはInnoDBを書き換え過ぎと思っています。また多分同じ目的で違うアプローチのもっと単純なパッチはある程度含めているのでv4まで見る必要はないかなと思っています。（v3以前からは、IOスレッドのハンドリングと、log_sys-&gt;mutex競合対策は採用させていただいています。）先日、初めて（！）googleパッチをビルドして動かしてみたのですが、そのままではビルドできないし、パラメータも外から変えられない（他にもパッチが必要なのか？）し、新オプションを有効にしたらかえって重くなるしで、かなり疑問を感じています。。。一般的にベンチマークの結果は実施法やデータ整理の仕方、見せ方で人によって大きく結果が違ってしまいます。難しいモノですね。。。というわけで、当面はv4パッチの変更点(多分ibufのcontractやmodified blockのflush周り)については採用する予定は個人的にはありません。納得のいかない方は「v4パッチのどの部分のInnoDBのどんな部分に対する何の変更はどう？」という形でご意見をいただけると幸いです。:-)&lt;br /&gt;&lt;br /&gt;さて、試していただくには勿論最新のバイナリを利用していただいてもいいのですが（&lt;a href="http://www.percona.com/mysql/xtradb/5.1.36-6/"&gt;XtraDB 1.0.3-6&lt;/a&gt;、&lt;a href="http://www.percona.com/mysql/5.0.83-b17/"&gt;5.0.83-percona&lt;/a&gt;）、常にバグフィクスをしている（つもり）ので、できればソースからビルドしてもらえれば多分間違いは少ないかと思います。また今、ごく一部で話題の&lt;a href="http://www.percona.com/docs/wiki/percona-xtradb:patch:innodb_recovery_patches"&gt;クラッシュリカバリが速くなるオプション&lt;/a&gt;（近日日本語で詳細に紹介（英語は不得意なので。。））も今時点でのバイナリには入っていません。&lt;br /&gt;最新のソースを得るためにはBazaarが必要です。(本家MySQLでも利用しているので説明は省略(!))&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(XtraDB)&lt;br /&gt;&gt; bzr branch lp:~percona-dev/percona-xtradb/extensions-1.0&lt;br /&gt;&lt;br /&gt;(5.0.84-percona)&lt;br /&gt;&gt; bzr branch lp:~percona-dev/percona-patches/5.0.84&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;とすれば最新のパッチファイルが得られます。新しい本家バージョンに対するbranchがある場合は古い方のメンテナンスは止まっているので注意してください。&lt;br /&gt;&lt;br /&gt;パッチの適用の仕方ですが、それぞれのディレクトリ直下には「series」というファイルがあってパッチの適用する順番が書かれています。（&lt;span style="font-weight: bold;"&gt;[!]&lt;/span&gt;:XtraDBのseriesファイルの最後に「xtradb-dir.patch」という行がありますがこのパッチはビルトインのInnoDBとXtraDBを共存させようとするモノですが、まだ怪しい（し、私はまだ関知していないパッチ）ので&lt;span style="font-weight: bold; font-style: italic;"&gt;この行は削除してください&lt;/span&gt;）&lt;br /&gt;&lt;br /&gt;パッチは手で１個１個適用しても良いのですが、seriesファイルを利用して&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(XtraDB)&lt;br /&gt;innodb_plugin-1.0.3の場所で&gt; (cd パッチの場所/extensions-1.0; cat `cat series`) | patch -p1&lt;br /&gt;  ("xtradb-dir.patch" は series ファイルから削除しておくこと)&lt;br /&gt;&lt;br /&gt;(5.0.84-percona)&lt;br /&gt;mysql-5.0.84の場所で&gt; (cd パッチの場所/5.0.84; cat `cat series`) | patch -p1&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;とすれば簡単かと。（MySQL-5.0のビルドの説明は省略。innodb-pluginのビルドの説明は、、、&lt;a href="http://d.hatena.ne.jp/sh2/20090707"&gt;この辺&lt;/a&gt;でお願いします。。。）&lt;br /&gt;&lt;br /&gt;では、この辺（&lt;a href="http://www.percona.com/docs/wiki/percona-xtradb:reference:variables:alphabetically"&gt;XtraDBで追加されるオプション&lt;/a&gt;）を見て興味のあるところを試してみてください。サーバーにCPUが１６個以上ある人やRAIDに数百万以上かけている方にはきっと特にご満足頂けると思います。。。&lt;br /&gt;&lt;br /&gt;これら追加パラメータのチューニングについて一回全部「日本語で」触れた方がいいかも知れないですね。（いつか。。）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-888577976983304983?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/888577976983304983/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/08/innodb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/888577976983304983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/888577976983304983'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/08/innodb.html' title='InnoDBの性能改善版'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-3030640076745182194</id><published>2009-05-30T10:58:00.000+09:00</published><updated>2009-05-30T12:06:41.170+09:00</updated><title type='text'>任意のテーブルの IMPORT TABLESPACE</title><content type='html'>MySQL の ALTER TABLE コマンドには、IMPORT TABLESPACE というコマンドがあります。InnoDBでは、innodb_file_per_table オプションを有効にしている場合に"クリーンな" .ibd ファイルのバックアップに差し替えることが出来ます。でもこれは色々制限があるので、利用していらっしゃる方は数少ないと思います。内部の構造／ID等が全く同じでなくてはいけないのでバックアップしたファイルをIMPORTできるようにするためには、ALTER TABLE コマンドによる内部的な表の再作成等もしてはいけないのです。&lt;br /&gt;&lt;br /&gt;そこで、任意の表をIMPORTできるように&lt;a href="https://launchpad.net/percona-xtradb"&gt;XtraDB&lt;/a&gt;を拡張してみました(&lt;a href="http://www.percona.com/docs/wiki/percona-xtradb:patch:innodb_expand_import"&gt;innodb_expand_import&lt;/a&gt;)。(現在branchは https://code.launchpad.net/~percona-dev/percona-xtradb/expand-import です)&lt;br /&gt;まだ、メインのbranchにはまだマージされていませんが、次のリリースには組み込まれるはずです。&lt;br /&gt;&lt;br /&gt;さて、リンク先を見ていただければわかるのですが、まだ制限があります。 .ibd ファイルと元のCREATE TABLE文だけでは表と成すための情報が不足しているのです。『索引名と索引ＩＤの対応』と『索引のroot page の場所』です。InnoDBは表、索引等を管理するための内部表を持っていてこれらの情報は SYS_INDEXES内部表に格納されているのでそれも元のInnoDBから抜き出してIMPORT時に利用する必要があります。&lt;br /&gt;&lt;br /&gt;というわけで、このEXPORTにあたる対となる機能は&lt;a href="https://launchpad.net/percona-xtrabackup"&gt;XtraBackup&lt;/a&gt;に追加してみました(&lt;a href="http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual#export"&gt;--export&lt;/a&gt;オプション)。コピーしたトランザクションログとデータファイルを使ってリカバリーを行って利用可能なバックアップに変換する--prepareオプションと一緒に指定すると、insert buffer をちゃんと空にした"クリーンな" .ibd ファイルを索引情報を含んだ .exp ファイルも一緒に生成してくれます。&lt;br /&gt;&lt;br /&gt;あとは、IMPORT先(要innodb_expand_import)で全く同じCREATE TABLE文で表を作成し、ALTER TABLE ... DISCARD TABLESPACEして、上記で生成された .ibd &amp;amp; .exp ファイルをその表の .frm ファイルと同じところに（アクセス権限に注意）置いて、ALTER TABLE ... IMPORT TABLESPACE するだけです。space_id, index_id, root page 位置の再登録などなど自動で変換してくれます。興味のある猛者はお試しください！&lt;br /&gt;&lt;br /&gt;というわけで、興味の赴くままに書いていきますので、話の前提関係が多少滅茶苦茶ですが&lt;br /&gt;（XtraDBって？XtraBackupって？などなど…）、書き続けていくうちに解決するでしょう。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-3030640076745182194?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/3030640076745182194/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/05/import-tablespace.html#comment-form' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3030640076745182194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/3030640076745182194'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/05/import-tablespace.html' title='任意のテーブルの IMPORT TABLESPACE'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7661288799334918410.post-6967814509016597822</id><published>2009-05-30T10:33:00.000+09:00</published><updated>2009-05-30T10:51:56.076+09:00</updated><title type='text'>ご挨拶</title><content type='html'>昨年末くらいからInnoDBの改造で生計を立てている者です。&lt;br /&gt;流石に日本語で触れていないネタが溜まってきたので、まったり紹介していけたらと思っています。&lt;br /&gt;よろしくです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7661288799334918410-6967814509016597822?l=buildup-db.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://buildup-db.blogspot.com/feeds/6967814509016597822/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://buildup-db.blogspot.com/2009/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/6967814509016597822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7661288799334918410/posts/default/6967814509016597822'/><link rel='alternate' type='text/html' href='http://buildup-db.blogspot.com/2009/05/blog-post.html' title='ご挨拶'/><author><name>Yasufumi Kinoshita</name><uri>http://www.blogger.com/profile/12171410795395824277</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
