SlideShare a Scribd company logo
DTrace で MySQL を斬る!
                〜 DTrace による MySQL 解析ことはじめ 〜




奥野 幹也
@nippondanji
mikiya (dot) okuno (at) gmail (dot) com
自己紹介
●
    今日は個人として来ています。
     –   http://nippondanji.blogspot.com/
     –   http://www.google.com/profiles/mikiya.okuno
●
    現職は MySQL サポートエンジニア。
     –   2000 年にサン・マイクロシステムズ入社
     –   2007 年に MySQL KK へ転職
     –   気付くとまたサン・マイクロシステムズに
     –   オラクル・コーポレーションに・・・
MySQL について
●
    オープンソースのリレーショナル・データベー
    ス・マネージメント・システム
●
    MySQL AB => Sun Microsystems => Oracle に
    よって開発。
●
    Web 開発においては圧倒的なシェア
       –   PHP/Perl/Java/Ruby/C/C++/ODBC...
●
    使い易く、安定して、高速に動作するのがウリ
MySQL は永久に不滅です!




                                     © Brian Aker
         http://krow.livejournal.com/687521.html
MySQL の特徴
●
    ANSI SQL 標準に準拠(一部の文法を除               ●   UNION
    く。)                                  ●
                                             ビュー
●
    種々のプラットフォームをサポート                     ●
                                             サブクエリ
    ( Windows 、 Linux 、 Mac 、各種 UNIX 系   ●   INFORMATION_SCHEMA
    OS )                                 ●
                                             SSL による通信
●
    ストレージエンジンによりデータを格納す                  ●
                                             Unicode をはじめとした各種文字コードの
    るレイヤーを仮想化                                サポート
●
    ACID 準拠のトランザクション                     ●
                                             全文検索
●
    XA トランザクション                          ●
                                             タイムゾーンのサポート
●
    非同期 Master/Slave 型レプリケーション           ●
                                             多種多様な開発言語のサポート( C 、 C+
●
    水平パーティショニング                              + 、 Java 、 Perl 、 PHP 、 Python 、 Ruby
    ( Range 、 List 、 Hash 、 Key )            など)
●
    ストアドプロシージャ、ストアドファンク                  ●
                                             ODBC による接続のサポート
    ション、トリガ
MySQL 構造の特徴
●
    モノリシックカーネル
●
    シングルプロセス・マルチスレッド
●
    1 セッション= 1 スレッド
●
    ストレージエンジン API による仮想化
●
    プラグイン API
●
    GNU Bison による Lexical Scanner
●
    ソースコードは C/C++ 混在( 100 万行程度)
MySQL の仕組み
クライアント             クライアント        クライアント
  Java               PHP           ODBC




     コネクション       コネクション      コネクション
      スレッド         スレッド        スレッド
                                          SQL の解析と最
                                            適化は共通
   パーサー・オプティマイザ・アクセス管理 等


            ストレージエンジン API                 データの格納や
  MyISAM           InnoDB       MySQL     アクセス方法は
                                Cluster   ストレージエン
                    テーブル
 table_name.MYI
                    スペース
                                          ジンごとに違う
table_name.MYD                   NDB
                   ログファイル        API

                  MySQL サーバ


                                データノード
                                 データノード
                               データノード
                              データノード
MySQL の構造を知る!
●
    Web ページ
      –   http://forge.mysql.com/wiki/MySQL_Internals
●
    書籍
      –   詳解 MySQL ( Understanding MySQL
           Internals )
      –   Expert MySQL
      –   MySQL データベース構築バイブル
●
    ソースコード!!
ソースコードを入手!
●   http://dev.mysql.com/downloads/
●   bzr branch lp:mysql-server/5.1 mysql-5.1
     ●
       sql/mysqld.cc ... main() 関数があるよ!
     ●
       sql/sql_parse.cc ... リクエストの入り口
     ●
       sql/sql_yacc.yy ... SQL パーサー                       この辺りから
     ●
       sql/handler.cc ... ストレージエンジン API                  覗いてみよう!
     ●
       sql/log.cc ... ログ関係
     ●
       sql/log_event.cc ... バイナリログ
     ●
       sql/sql_show.cc ... SHOW コマンドと I_S
     ●
       sql/slave.cc ... レプリケーションスレーブ
     ●
       sql/item*cc ... データ型と関数
     ●
       sql/sql_base.cc, sql/sql_class.cc ... 基本的なデータ型等
     ●
       storage/innodb ... InnoDB の実装
     ●
       storage/myisam ... MyISAM の実装
     ●mysys/* ... MySQL Core API
DTrace!!
●
    Solaris 10 で搭載された機能。
      –   Solaris/Mac OS X/FreeBSD で利用可能
●
    カーネル / ユーザープロセスをトレース。
●
    プローブと呼ばれる観測点を対象のプログラム
    に動的に埋め込む。
●
    プローブの種類に応じたプロバイダ。
●
    D 言語と呼ばれるプログラムで操作。
      –   参考: D 言語基本文法最速マスター( DTrace のほう)
      –   http://nippondanji.blogspot.com/2010/02/ddtrace.html
DTrace 動作イメージ
                                 プロバイダに指示を出したり
           ユーザープロセス              情報を表示したり
           ( mysqld など)
                                   dtrace コマンド
                 プロ
                 ーブ
ユーザー空間                                   各種情報


カーネル空間                    Fire
           有効化
                                 DTrace モジュール


   プロバイダ          プロ
                  ーブ
                 モジュール
プロバイダの種類
Provider名          Probeの場所        Providerのシンボル
FBT - function     カーネル内における関数の    fbt
boundary tracing   呼び出しとリターン。

Systrace           システムコールの呼び出し    syscall
                   とリターン。
SDT - statically   ソースコードにおいて指定さ sdtまたはコンパイル時に指
defined tracing    れた任意の場所。(カーネ  定
                   ル内)

PID                ユーザープロセスにおける    pid{pid}
                   関数の呼び出しとリターン。   (pid1234のように指定する)

Fasttrap           ソースコードにおいて指定さ コンパイル時に指定
                   れた任意の場所。(ユー
                   ザープロセス内)

dtrace             トレースの開始と終了、およ BEGIN/END/ERROR
                   び例外発生時。
profiling          一定期間ごと。         profile-n/tick-n
                                   (nはインターバル)
D 言語の書式
プローブ記述子
/ 述語 /
{               これを必要な回数
                 列挙するだけ。
   アクション      ループなし、分岐なし。
}
プローブの書式
●
    プロバイダ名 : モジュール名 : 関数名 : プロー
    ブ名
      –   pid プロバイダの場合、 pid{ プロセス ID} とい
            う書式になる。例 ) pid123
      –   C++ の関数名を指定するにはワイルドカード
           ( * )が便利。
mysqld 内に設置可能なプローブ
●   pid
          –   関数の entry         C++ の関数名に注意
                                   It's mangled!!
          –   関数の return
          –   関数オフセット
          –   書式 ) pid123
●   Fasttrap
          –   MySQL 5.4 で追加!!
          –   書式 ) mysql123
述語の書式
●
    評価出来る式なら何でも OK
      –   例 ) execname == "mysqld"
●
    条件分岐がない代わりに述語で Fire するかどう
    かをコントロール。
アクション
●
    情報の出力や変数への代入。
●
    セミコロン区切りで必要な数を列挙。
●
    情報の出力例。
     –   trace( 式 )
     –   tracemem(address, size);
     –   printf(" フォーマット ", arg1, arg2, ...);
     –   ustack(); jstack(); stack();
         etc
変数の種類
●
    スカラー変数… argname
      –   グローバルなスコープを持つ
●
    スレッドローカル変数… self->argname
      –   同一スレッドだけからアクセス可能
●
    節固有変数… this->argname
      –   プローブが Fire している間だけ利用可能
●
    組み込み変数…後述              ユーザープロセス
●
    外部変数… `argname          には使えない。
組み込み変数
●
    arg0 ... arg9 ・・・プローブに対する引数の最初の 10 個(数値型で取得)
●
    cwd ・・・カレントワーキングディレクトリ
●
    errno ・・・直前のシステムコールによって返されたエラーの値
●
    execname ・・・実行プログラム名
●
    uid ・・・実行中のプロセスの実効ユーザー ID
●
    gid ・・・実行中のプロセスの実効グループ ID
●
    pid ・・・実行中のプロセス ID
●
    ppid ・・・実行中のプロセスの親プロセス ID
●
    tid ・・・現在のスレッドのスレッド ID
                                         大切な情報源!!
●
    probeprov ・・・プロバイダ名
●
    probemod ・・・モジュール名
●
    probefunc ・・・関数名
●
    probename ・・・プローブ名
●
    timestamp ・・・タイムスタンプ
●
    walltimestamp ・・・ 1970 年 1 月 1 日 UTC からの経過時間。単位はナノ秒。
MySQL 5.4 で追加されたプローブ
 ●
     include/probes_mysql.d を見よ!                                  Fasttrap!


connection-start(unsigned long conn_id, char *user, char *host);
connection-done(int status, unsigned long conn_id);
command-start(unsigned long conn_id, int command, char *user, char *host);
command-done(int status);
query-start(char *query, unsigned long connid, char *db_name, char *user,
                     char *host, int exec_type);
query-done(int status);
query-parse-start(char *query);
query-parse-done(int status);
query-cache-hit(char *query, unsigned long rows);
query-cache-miss(char *query);
query-exec-start(char *query, unsigned long connid, char *db_name,
                      char *user, char *host, int exec_type);
query-exec-done(int status);
insert-row-start(char *db, char *table);
insert-row-done(int status);
update-row-start(char *db, char *table);
                  :
                  :
プローブを設置し易い関数
●
    DTrace の制約として、外部変数はユーザープ
    ロセスをサポートしていない。
      –   引数が重要な情報源!
      –   mysql_parse() 関数 ... 第 2 引数が SQL 文
●
    エラー発生時に Fire する。
      –   vprint_msg_to_log() ... エラーログへの書
           き込み
      –   my_error() ... クライアントへエラー送信
      –   my_print_error() ... シンタックスエラー
例 1) SQL 文を抽出
pid$target::*mysql_parse*:entry
{
  trace(copyinstr(arg1));
}
例 2) メモリ不足の原因
pid$target::*mysql_parse*:entry
{
  self->q = 1;
  self->qstr = copyinstr(arg1);
}

pid$target::*mysql_parse*:entry
/ self->q /
{
  self->q = 0;
  self->qstr = 0;
}

pid$target::malloc:return
/ errno == ENOMEM /
{
  printf("=== Memory allocation error at %Y ===n", walltimestamp);
  ustack();
}

pid$target::malloc:return
/ errno == ENOMEM && self->q /
{
  printf("QUERY: %sn", self->qstr);
}
例 3) エラーメッセージを追跡
pid$target::*mysql_parse*:entry
{
  self->q = 1;
  self->qstr = copyinstr(arg1);
}

pid$target::*mysql_parse*:return
/ self->q /
{
  self->q = 0;
  self->qstr = copyinstr(arg1);
}

pid$target::*my_error:entry
/ self->q /
{
  printf("Query generated an error (errno = %d): %sn",
    arg0, self->qstr);
  ustack();
}

pid$target::*my_printf_error:entry
/ self->q /
{
  printf("Syntax error: %sn", self->qstr);
}
例 4) クエリキャッシュのヒット率
mysql$target:::query-cache-hit
{
  hit++;
  @qhit["rows per query when qcache hit"] = quantize(arg1);
}

mysql$target:::query-cache-miss
{
  miss++;
  @qmiss[copyinstr(arg0)] = count();
}

tick-5sec
/ hit != 0 || miss != 0 /
{
  printf("ratio: %u (%u / %u)", 100 * hit / (hit+miss), hit, hit+miss);
}

tick-5sec
/ hit == 0 && miss == 0 /
{
  printf("ratio: NULL");
}

tick-5sec
{
  total_hit += hit;
  total_miss += miss;
  hit = miss = 0;
}
例 5) 1000 行以上のソートを検出
#!/usr/sbin/dtrace -s

BEGIN
{
  printf("Hit Ctrl+C to exit.n");
}

mysql$target:::filesort-start
{
  self->sorting = 1;
  self->db = arg0 == 0 ? "NULL" : copyinstr(arg0);
  self->table = copyinstr(arg1);
}

mysql$target:::filesort-done
/self->sorting && arg1 > 1000/
{
  self->sorting=0;
  printf("DB: %s, Table: %s, Rows: %u",
    self->db, self->table, arg1);
}
例 5) 1000 行以上のソートを検出
#!/usr/sbin/dtrace -s

BEGIN
{
  printf("Hit Ctrl+C to exit.n");
}

mysql$target:::filesort-start
{
  self->sorting = 1;
  self->db = arg0 == 0 ? "NULL" : copyinstr(arg0);
  self->table = copyinstr(arg1);
}

mysql$target:::filesort-done
/self->sorting && arg1 > 1000/
{
  self->sorting=0;
  printf("DB: %s, Table: %s, Rows: %u",
    self->db, self->table, arg1);
}
例 6) テーブルごとのソート統計
mysql$target:::filesort-start
{
  self->sorting = 1;
  self->db = arg0 == 0 ? "NULL" :
    copyinstr(arg0);
  self->table = copyinstr(arg1);
}

mysql$target:::filesort-done
/self->sorting/
{
  self->sorting=0;
  @sorts[self->db, self->table] = sum(arg1);
}
例 7) ソート中断の原因
#!/usr/sbin/dtrace -s

pid$target::*mysql_parse*:entry
{
  self->q = 1;
  self->qstr = copyinstr(arg1);
}

pid$target::*mysql_parse*:return
/ self->q /
{
  self->q = 0;
  self->qstr = 0;
}

mysql$target:::filesort-done
/ self->q && arg0 /
{
  printf("nnABORTED QUERY: %sn", self->qstr);
  ustack();
}
DTrace Toolkit
●
    DTrace を使ったユーティリティ群
      –   http://hub.opensolaris.org/bin/view/Community+
            Group+dtrace/dtracetoolkit
      –   http://nippondanji.blogspot.com/2007/07/dtrace.
            html
●
    DTrace を知らなくても利用可能
●
    Mac OS X ではデフォルトでインストール
      –   grep -I -m 1 dtrace /usr/bin/*
DTrace Toolkit つづき
●
    dappprof ... ユーザープロセスをプロファイリングします。
●
    dapptrace ... ユーザープロセスの関数呼び出しを追跡。
●
    dtruss ... ユーザープロセスのシステムコール呼び出しを追跡。
●
    errinfo ... システムコール呼び出しにおいてエラーの発生を追跡。
●
    execsnoop ... プロセスの実行開始を追跡。意図しないプログラムが実行さ
    れていないかどうかを確認することが可能。
●
    iotop ... システム全体で、 I/O 帯域をたくさん消費しているプロセスをリス
    トアップ。 IO の帯域を消費しているプロセス特定に便利。
●
    kill.d ... プロセスにシグナルが送られた時にその送り主と送り先に関する情
    報を記録。
●
    opensnoop ... ファイルが open された際に情報を出力。
デモで利用したもの
●   Random Query Generator
       –   http://forge.mysql.com/wiki/Random_Query_Ge
             nerator
●   Example DBs
       –   http://dev.mysql.com/doc/index-other.html
●   MySQL Sand Box
       –   http://mysqlsandbox.net/
宣伝!!
●
    著書: MySQL エキスパートトラブルシュー
    ティングガイド(仮)/技術評論社
      –   様々な角度から MySQL のトラブルを解析するのに役立つ書
           籍です。ぜひ安心な DBA 生活のお供に一冊どうぞ。
      –   第一章: MySQL の概要
      –   第二章:開発時における問題
      –   第三章: MySQL の状態を見る。
      –   第四章: DTrace
      –   第五章:運用中に起きる諸問題。
      –   第六章:堅牢な運用を実現するために
      –   第七章:ソースコードのビルド
Q&A

More Related Content

What's hot

MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
昌桓 李
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 
JSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使うJSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使う
Yuki Takeichi
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
NTT DATA OSS Professional Services
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
 
設計書からの卒業
設計書からの卒業設計書からの卒業
設計書からの卒業
Fumiyasu Sumiya
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
 
技術ブログを書こう
技術ブログを書こう技術ブログを書こう
技術ブログを書こう
akira6592
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Platform - Japan
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 

What's hot (20)

MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
JSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使うJSONB型でpostgresをNoSQLっぽく使う
JSONB型でpostgresをNoSQLっぽく使う
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
設計書からの卒業
設計書からの卒業設計書からの卒業
設計書からの卒業
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説今秋リリース予定のPostgreSQL11を徹底解説
今秋リリース予定のPostgreSQL11を徹底解説
 
技術ブログを書こう
技術ブログを書こう技術ブログを書こう
技術ブログを書こう
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 

Viewers also liked

私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
Mikiya Okuno
 
チューニンガソン5の復讐
チューニンガソン5の復讐チューニンガソン5の復讐
チューニンガソン5の復讐
yoku0825
 
Ottoman Military Band (Mehter)
Ottoman Military Band (Mehter)Ottoman Military Band (Mehter)
Ottoman Military Band (Mehter)
dafne4198
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
Mikiya Okuno
 
Enter the-dolphine
Enter the-dolphineEnter the-dolphine
Enter the-dolphineMikiya Okuno
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
Mikiya Okuno
 
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
Yukio Saito
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
Mikiya Okuno
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
Mikiya Okuno
 
あなたの知らないRrdtool
あなたの知らないRrdtoolあなたの知らないRrdtool
あなたの知らないRrdtoolShoichi Masuhara
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
Mikiya Okuno
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
Takanori Sejima
 

Viewers also liked (17)

私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
 
チューニンガソン5の復讐
チューニンガソン5の復讐チューニンガソン5の復讐
チューニンガソン5の復讐
 
Ottoman Military Band (Mehter)
Ottoman Military Band (Mehter)Ottoman Military Band (Mehter)
Ottoman Military Band (Mehter)
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
Enter the-dolphine
Enter the-dolphineEnter the-dolphine
Enter the-dolphine
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
 
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
斉藤之雄 が 公立大学 産業技術大学院大学 で獲得したこと。
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
Rrdtool基礎から応用
Rrdtool基礎から応用Rrdtool基礎から応用
Rrdtool基礎から応用
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
Database smells
Database smellsDatabase smells
Database smells
 
あなたの知らないRrdtool
あなたの知らないRrdtoolあなたの知らないRrdtool
あなたの知らないRrdtool
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 

Similar to DTraceによるMySQL解析ことはじめ

TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Mitsuru Katoh
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
smdkk
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
LINE Corporation
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
Naoki (Neo) SATO
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocket
koichik
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #520160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
Hiro Yoshioka
 

Similar to DTraceによるMySQL解析ことはじめ (20)

TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocket
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #520160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 

More from Mikiya Okuno

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
Mikiya Okuno
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
Mikiya Okuno
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
Mikiya Okuno
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
Mikiya Okuno
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
Mikiya Okuno
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴
Mikiya Okuno
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
Mikiya Okuno
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
Mikiya Okuno
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
Mikiya Okuno
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
Mikiya Okuno
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
Mikiya Okuno
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
Mikiya Okuno
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
Mikiya Okuno
 
RDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるRDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考える
Mikiya Okuno
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
Mikiya Okuno
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
Mikiya Okuno
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
Mikiya Okuno
 

More from Mikiya Okuno (20)

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
 
RDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるRDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考える
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
 

Recently uploaded

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 

Recently uploaded (16)

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 

DTraceによるMySQL解析ことはじめ

  • 1. DTrace で MySQL を斬る! 〜 DTrace による MySQL 解析ことはじめ 〜 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com
  • 2. 自己紹介 ● 今日は個人として来ています。 – http://nippondanji.blogspot.com/ – http://www.google.com/profiles/mikiya.okuno ● 現職は MySQL サポートエンジニア。 – 2000 年にサン・マイクロシステムズ入社 – 2007 年に MySQL KK へ転職 – 気付くとまたサン・マイクロシステムズに – オラクル・コーポレーションに・・・
  • 3. MySQL について ● オープンソースのリレーショナル・データベー ス・マネージメント・システム ● MySQL AB => Sun Microsystems => Oracle に よって開発。 ● Web 開発においては圧倒的なシェア – PHP/Perl/Java/Ruby/C/C++/ODBC... ● 使い易く、安定して、高速に動作するのがウリ
  • 4. MySQL は永久に不滅です! © Brian Aker http://krow.livejournal.com/687521.html
  • 5. MySQL の特徴 ● ANSI SQL 標準に準拠(一部の文法を除 ● UNION く。) ● ビュー ● 種々のプラットフォームをサポート ● サブクエリ ( Windows 、 Linux 、 Mac 、各種 UNIX 系 ● INFORMATION_SCHEMA OS ) ● SSL による通信 ● ストレージエンジンによりデータを格納す ● Unicode をはじめとした各種文字コードの るレイヤーを仮想化 サポート ● ACID 準拠のトランザクション ● 全文検索 ● XA トランザクション ● タイムゾーンのサポート ● 非同期 Master/Slave 型レプリケーション ● 多種多様な開発言語のサポート( C 、 C+ ● 水平パーティショニング + 、 Java 、 Perl 、 PHP 、 Python 、 Ruby ( Range 、 List 、 Hash 、 Key ) など) ● ストアドプロシージャ、ストアドファンク ● ODBC による接続のサポート ション、トリガ
  • 6. MySQL 構造の特徴 ● モノリシックカーネル ● シングルプロセス・マルチスレッド ● 1 セッション= 1 スレッド ● ストレージエンジン API による仮想化 ● プラグイン API ● GNU Bison による Lexical Scanner ● ソースコードは C/C++ 混在( 100 万行程度)
  • 7. MySQL の仕組み クライアント クライアント クライアント Java PHP ODBC コネクション コネクション コネクション スレッド スレッド スレッド SQL の解析と最 適化は共通 パーサー・オプティマイザ・アクセス管理 等 ストレージエンジン API データの格納や MyISAM InnoDB MySQL アクセス方法は Cluster ストレージエン テーブル table_name.MYI スペース ジンごとに違う table_name.MYD NDB ログファイル API MySQL サーバ データノード データノード データノード データノード
  • 8. MySQL の構造を知る! ● Web ページ – http://forge.mysql.com/wiki/MySQL_Internals ● 書籍 – 詳解 MySQL ( Understanding MySQL Internals ) – Expert MySQL – MySQL データベース構築バイブル ● ソースコード!!
  • 9. ソースコードを入手! ● http://dev.mysql.com/downloads/ ● bzr branch lp:mysql-server/5.1 mysql-5.1 ● sql/mysqld.cc ... main() 関数があるよ! ● sql/sql_parse.cc ... リクエストの入り口 ● sql/sql_yacc.yy ... SQL パーサー この辺りから ● sql/handler.cc ... ストレージエンジン API 覗いてみよう! ● sql/log.cc ... ログ関係 ● sql/log_event.cc ... バイナリログ ● sql/sql_show.cc ... SHOW コマンドと I_S ● sql/slave.cc ... レプリケーションスレーブ ● sql/item*cc ... データ型と関数 ● sql/sql_base.cc, sql/sql_class.cc ... 基本的なデータ型等 ● storage/innodb ... InnoDB の実装 ● storage/myisam ... MyISAM の実装 ●mysys/* ... MySQL Core API
  • 10. DTrace!! ● Solaris 10 で搭載された機能。 – Solaris/Mac OS X/FreeBSD で利用可能 ● カーネル / ユーザープロセスをトレース。 ● プローブと呼ばれる観測点を対象のプログラム に動的に埋め込む。 ● プローブの種類に応じたプロバイダ。 ● D 言語と呼ばれるプログラムで操作。 – 参考: D 言語基本文法最速マスター( DTrace のほう) – http://nippondanji.blogspot.com/2010/02/ddtrace.html
  • 11. DTrace 動作イメージ プロバイダに指示を出したり ユーザープロセス 情報を表示したり ( mysqld など) dtrace コマンド プロ ーブ ユーザー空間 各種情報 カーネル空間 Fire 有効化 DTrace モジュール プロバイダ プロ ーブ モジュール
  • 12. プロバイダの種類 Provider名 Probeの場所 Providerのシンボル FBT - function カーネル内における関数の fbt boundary tracing 呼び出しとリターン。 Systrace システムコールの呼び出し syscall とリターン。 SDT - statically ソースコードにおいて指定さ sdtまたはコンパイル時に指 defined tracing れた任意の場所。(カーネ 定 ル内) PID ユーザープロセスにおける pid{pid} 関数の呼び出しとリターン。 (pid1234のように指定する) Fasttrap ソースコードにおいて指定さ コンパイル時に指定 れた任意の場所。(ユー ザープロセス内) dtrace トレースの開始と終了、およ BEGIN/END/ERROR び例外発生時。 profiling 一定期間ごと。 profile-n/tick-n (nはインターバル)
  • 13. D 言語の書式 プローブ記述子 / 述語 / { これを必要な回数 列挙するだけ。 アクション ループなし、分岐なし。 }
  • 14. プローブの書式 ● プロバイダ名 : モジュール名 : 関数名 : プロー ブ名 – pid プロバイダの場合、 pid{ プロセス ID} とい う書式になる。例 ) pid123 – C++ の関数名を指定するにはワイルドカード ( * )が便利。
  • 15. mysqld 内に設置可能なプローブ ● pid – 関数の entry C++ の関数名に注意 It's mangled!! – 関数の return – 関数オフセット – 書式 ) pid123 ● Fasttrap – MySQL 5.4 で追加!! – 書式 ) mysql123
  • 16. 述語の書式 ● 評価出来る式なら何でも OK – 例 ) execname == "mysqld" ● 条件分岐がない代わりに述語で Fire するかどう かをコントロール。
  • 17. アクション ● 情報の出力や変数への代入。 ● セミコロン区切りで必要な数を列挙。 ● 情報の出力例。 – trace( 式 ) – tracemem(address, size); – printf(" フォーマット ", arg1, arg2, ...); – ustack(); jstack(); stack(); etc
  • 18. 変数の種類 ● スカラー変数… argname – グローバルなスコープを持つ ● スレッドローカル変数… self->argname – 同一スレッドだけからアクセス可能 ● 節固有変数… this->argname – プローブが Fire している間だけ利用可能 ● 組み込み変数…後述 ユーザープロセス ● 外部変数… `argname には使えない。
  • 19. 組み込み変数 ● arg0 ... arg9 ・・・プローブに対する引数の最初の 10 個(数値型で取得) ● cwd ・・・カレントワーキングディレクトリ ● errno ・・・直前のシステムコールによって返されたエラーの値 ● execname ・・・実行プログラム名 ● uid ・・・実行中のプロセスの実効ユーザー ID ● gid ・・・実行中のプロセスの実効グループ ID ● pid ・・・実行中のプロセス ID ● ppid ・・・実行中のプロセスの親プロセス ID ● tid ・・・現在のスレッドのスレッド ID 大切な情報源!! ● probeprov ・・・プロバイダ名 ● probemod ・・・モジュール名 ● probefunc ・・・関数名 ● probename ・・・プローブ名 ● timestamp ・・・タイムスタンプ ● walltimestamp ・・・ 1970 年 1 月 1 日 UTC からの経過時間。単位はナノ秒。
  • 20. MySQL 5.4 で追加されたプローブ ● include/probes_mysql.d を見よ! Fasttrap! connection-start(unsigned long conn_id, char *user, char *host); connection-done(int status, unsigned long conn_id); command-start(unsigned long conn_id, int command, char *user, char *host); command-done(int status); query-start(char *query, unsigned long connid, char *db_name, char *user, char *host, int exec_type); query-done(int status); query-parse-start(char *query); query-parse-done(int status); query-cache-hit(char *query, unsigned long rows); query-cache-miss(char *query); query-exec-start(char *query, unsigned long connid, char *db_name, char *user, char *host, int exec_type); query-exec-done(int status); insert-row-start(char *db, char *table); insert-row-done(int status); update-row-start(char *db, char *table); : :
  • 21. プローブを設置し易い関数 ● DTrace の制約として、外部変数はユーザープ ロセスをサポートしていない。 – 引数が重要な情報源! – mysql_parse() 関数 ... 第 2 引数が SQL 文 ● エラー発生時に Fire する。 – vprint_msg_to_log() ... エラーログへの書 き込み – my_error() ... クライアントへエラー送信 – my_print_error() ... シンタックスエラー
  • 22. 例 1) SQL 文を抽出 pid$target::*mysql_parse*:entry { trace(copyinstr(arg1)); }
  • 23. 例 2) メモリ不足の原因 pid$target::*mysql_parse*:entry { self->q = 1; self->qstr = copyinstr(arg1); } pid$target::*mysql_parse*:entry / self->q / { self->q = 0; self->qstr = 0; } pid$target::malloc:return / errno == ENOMEM / { printf("=== Memory allocation error at %Y ===n", walltimestamp); ustack(); } pid$target::malloc:return / errno == ENOMEM && self->q / { printf("QUERY: %sn", self->qstr); }
  • 24. 例 3) エラーメッセージを追跡 pid$target::*mysql_parse*:entry { self->q = 1; self->qstr = copyinstr(arg1); } pid$target::*mysql_parse*:return / self->q / { self->q = 0; self->qstr = copyinstr(arg1); } pid$target::*my_error:entry / self->q / { printf("Query generated an error (errno = %d): %sn", arg0, self->qstr); ustack(); } pid$target::*my_printf_error:entry / self->q / { printf("Syntax error: %sn", self->qstr); }
  • 25. 例 4) クエリキャッシュのヒット率 mysql$target:::query-cache-hit { hit++; @qhit["rows per query when qcache hit"] = quantize(arg1); } mysql$target:::query-cache-miss { miss++; @qmiss[copyinstr(arg0)] = count(); } tick-5sec / hit != 0 || miss != 0 / { printf("ratio: %u (%u / %u)", 100 * hit / (hit+miss), hit, hit+miss); } tick-5sec / hit == 0 && miss == 0 / { printf("ratio: NULL"); } tick-5sec { total_hit += hit; total_miss += miss; hit = miss = 0; }
  • 26. 例 5) 1000 行以上のソートを検出 #!/usr/sbin/dtrace -s BEGIN { printf("Hit Ctrl+C to exit.n"); } mysql$target:::filesort-start { self->sorting = 1; self->db = arg0 == 0 ? "NULL" : copyinstr(arg0); self->table = copyinstr(arg1); } mysql$target:::filesort-done /self->sorting && arg1 > 1000/ { self->sorting=0; printf("DB: %s, Table: %s, Rows: %u", self->db, self->table, arg1); }
  • 27. 例 5) 1000 行以上のソートを検出 #!/usr/sbin/dtrace -s BEGIN { printf("Hit Ctrl+C to exit.n"); } mysql$target:::filesort-start { self->sorting = 1; self->db = arg0 == 0 ? "NULL" : copyinstr(arg0); self->table = copyinstr(arg1); } mysql$target:::filesort-done /self->sorting && arg1 > 1000/ { self->sorting=0; printf("DB: %s, Table: %s, Rows: %u", self->db, self->table, arg1); }
  • 28. 例 6) テーブルごとのソート統計 mysql$target:::filesort-start { self->sorting = 1; self->db = arg0 == 0 ? "NULL" : copyinstr(arg0); self->table = copyinstr(arg1); } mysql$target:::filesort-done /self->sorting/ { self->sorting=0; @sorts[self->db, self->table] = sum(arg1); }
  • 29. 例 7) ソート中断の原因 #!/usr/sbin/dtrace -s pid$target::*mysql_parse*:entry { self->q = 1; self->qstr = copyinstr(arg1); } pid$target::*mysql_parse*:return / self->q / { self->q = 0; self->qstr = 0; } mysql$target:::filesort-done / self->q && arg0 / { printf("nnABORTED QUERY: %sn", self->qstr); ustack(); }
  • 30. DTrace Toolkit ● DTrace を使ったユーティリティ群 – http://hub.opensolaris.org/bin/view/Community+ Group+dtrace/dtracetoolkit – http://nippondanji.blogspot.com/2007/07/dtrace. html ● DTrace を知らなくても利用可能 ● Mac OS X ではデフォルトでインストール – grep -I -m 1 dtrace /usr/bin/*
  • 31. DTrace Toolkit つづき ● dappprof ... ユーザープロセスをプロファイリングします。 ● dapptrace ... ユーザープロセスの関数呼び出しを追跡。 ● dtruss ... ユーザープロセスのシステムコール呼び出しを追跡。 ● errinfo ... システムコール呼び出しにおいてエラーの発生を追跡。 ● execsnoop ... プロセスの実行開始を追跡。意図しないプログラムが実行さ れていないかどうかを確認することが可能。 ● iotop ... システム全体で、 I/O 帯域をたくさん消費しているプロセスをリス トアップ。 IO の帯域を消費しているプロセス特定に便利。 ● kill.d ... プロセスにシグナルが送られた時にその送り主と送り先に関する情 報を記録。 ● opensnoop ... ファイルが open された際に情報を出力。
  • 32. デモで利用したもの ● Random Query Generator – http://forge.mysql.com/wiki/Random_Query_Ge nerator ● Example DBs – http://dev.mysql.com/doc/index-other.html ● MySQL Sand Box – http://mysqlsandbox.net/
  • 33. 宣伝!! ● 著書: MySQL エキスパートトラブルシュー ティングガイド(仮)/技術評論社 – 様々な角度から MySQL のトラブルを解析するのに役立つ書 籍です。ぜひ安心な DBA 生活のお供に一冊どうぞ。 – 第一章: MySQL の概要 – 第二章:開発時における問題 – 第三章: MySQL の状態を見る。 – 第四章: DTrace – 第五章:運用中に起きる諸問題。 – 第六章:堅牢な運用を実現するために – 第七章:ソースコードのビルド
  • 34. Q&A