ErlangLT申し込んだはいいけどぜんぜん準備してなくて、比較的すぐに書ける内容ってことでDTraceの話をしてきました。LT中にも言ったんだけど、ほんとはplan9上のinfernoでlimboプログラミングとかやってみたかったけどまだムリポ。資料張ってもいいんだけど、あまりに適当すぎたのでもうちょいまとめて書きます。参照していただくとして、パフォーマンスチューニングのためのプロファイリングツールと思っていただければいいかと。MySQLではデフォルトで対応しています。Linuxのoprofileみたいなもんだと思うけど、最初からうごくのでらくちん。graphを見たり実行時間を調べたり、なんてことができます。amd64版では、次のようなかんじでprobeを調べることができます。それぞれがどういう意味なのかは、文字列をググるなりソースからgrepするなりして調べてください。index-read-row-start...DTraceToolKitDTraceでググると「DTrace用のD言語があって云々」という例がたくさん見つかると思います。以下にいろいろスクリプトが転がっていると思います。中身はそのまま読めるスクリプトなので、それを参考にしつつ自分でいろいろアレンジすればよさそう。hotkernelDTTのなかでも、とりあえず実行してみるとなんとなくありがたいのがhotkernelとhotuser。実は中身はDスクリプトを吐き出して実行するperlスクリプトになっててちょっと気持ち悪いです。中身はprofile-1001hzとうprobeを使っていて、1001hzで実行ポイントをサンプリングして、サンプリング中の実行時間の割合を表示してくれます。id:a2cが聞いてくれた通り、あまり細かくやりすぎるとカーネルに負荷がかかっちゃうので、これくらいで。33.3%mainSortってのがけっこう時間食ってるなー、なんてことが分かります。いうのは、libbz2のソース読んでね。time食ってそうだな、てことは分かるかな??もうちょい実用的な例あらかじめアプリに用意されたprobeで調べたいことがわかればハッピーですが、そうでない場合もあります。MySQLで、テーブルにindexをたくさん張ってるけど、こいつらがどれくらい使われているのかを調べたい場合。readのタイミングでテーブル名は分かるんだけど、具体的にどのindexなのかまでは分かりません。MySQLにパッチ当てるんでもいいけど、そこは極力DTrace側だけでなんとかしたいところ。Global、木下さん@PERCONA、どもでした!!)。Providerで見てみることにします。arg2);}とりあえず冗長めでいろいろ出力版。サンプルデータ次のようなテーブルを考えます。件のサンプルデータを作ります。mysqld`screen起動してどっかで上を実行しつつ、いろいろクエリを投げてみる。traceに出なくなります。__1cJha_myisamOindex_read_map6MpCpkCLnQha_rkey_function__i_,aho,hogeちょっとここまで細かいと負荷もひどいので微妙ですが、explainよりももうちょい細かい実行計画の流れ調べたいときにも使えそうですね!まとめSolaris使ってる人ってやっぱり少ないんですね。自分も1年前は「Debianしかありえねーだろ」と思っていたけど、OpenSolarisならユーザランドもけっこう整備されていていいかんじです。デスクトップ環境ならやっぱDebian。r/月別アーカイブはてなブログをはじめよう!ichii386さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。