Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード

2018-04-08

Netflix のオープンソース可視化ツール FlameScope を使ってみた

Brendan Gregg らの所属する Netflix の cloud performance engineering team が FlameScope というパフォーマンス可視化ツールオープンソースで公開した。詳しくは Netflix Tech Blog 参照。

flame graphs は瞬間的なスパイクを分析しづらかったが、FlameScope により1秒未満のヒートマップでイベント発生回数の多い時間帯が可視化されピンポイントで特定期間の flame graph を表示できるようになった。Oracle Database でいうと AWR/Statspack レポートだけでなく ASH 的な分析、さらに1秒未満のCPU時間の内訳のプロファイリングまで Craig Shallahamer の fulltime.sh でズームアップできるイメージ*1

FlameScope は Pyhton(フレームワークFlask) で書かれた Web アプリで、Perf で取得したデータを、ブラウザでアクセスして flame graph を分析するツールです。


Brendan Gregg は性能分析の大家でバックグラウンドは以下の通り。

Flame Graphs の作者の Brendan Gregg は Sun、Oracle、Joyent でカーネル、パフォーマンスのエンジニアとして活躍し、現在は Netflix(北米インターネットトラフィックの32.3%を占める。YouTubeは17.1%)*2シニア・パフォーマンス・アーキテクトです。ZFS L2ARC や DTrace Toolkit の開発者で、Solaris Performance and ToolsDTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD の著者で、LinuxConFreeBSD SummitOaktable WorldAWS re:Invent などのイベントで幅広く活動されています。是非 Brendan Gregg’s Homepage をご覧ください。

perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog

FlameScope の見方

x軸が秒単位、y軸が1秒未満の時系列になっていて、赤いセルほどイベント発生回数が多い(CPU負荷が高い)。密度を高めるため2次元にしていると思われる。

f:id:yohei-a:20180408180622p:image:w360

実際のスクリーンショットはこんな感じで、x軸が秒単位、y軸が1秒未満の単位になっていて、

f:id:yohei-a:20180408180626p:image:w360

選択範囲の FlameGraph を表示することができる。

f:id:yohei-a:20180408180632p:image:w360

flame graph の見方は以下の通り。詳しくはこちら

  • 関数名で左から右にソートされている
  • コールスタックは上に行くほど深い
  • 最もコールスタックが深くて横幅が長いのがCPUを最も使っている関数

FlameScope を使ってみる

macOS に FlameScope をインストールして、Linux で perf で取得した性能情報をダウンロードして、FlameScope で可視化してみた。

f:id:yohei-a:20180408230316p:image:w360 f:id:yohei-a:20180408230323p:image:w360 f:id:yohei-a:20180408230329p:image:w360


環境

インストール
$ sudo yum -y install perf
$ git clone https://github.com/Netflix/flamescope
$ cd flamescope
$ sudo pip install -r requirements.txt

使ってみる
  • EC2 で perf で性能情報を取得しつつ openssl で負荷をかける
    • perf で性能情報を収集する
$ sudo perf record -F 49 -a -g -- sleep 120
$ sudo perf script --header > stacks.openssl.2018-04-07_01
$ gzip stacks.openssl.2018-04-07_01
$ ls -lh stacks.openssl.2018-04-07_01.gz
-rw-rw-r-- 1 ec2-user ec2-user 389K Apr  8 13:45 stacks.openssl.2018-04-07_01.gz
$ openssl speed -multi 4
  • macOS で FlameScope を起動する。
    • FlameScope を起動する
$ python run.py

スタックのリストが表示されるので、stacks.openssl.2018-04-07_01.gz をクリックする。

f:id:yohei-a:20180408230316p:image:w640

ヒートマップを表示すると綺麗に2分間計測したうち1分経過後から30秒間が赤くなっている。

f:id:yohei-a:20180408230323p:image:w640

範囲を選択してクリックすると flame graph を見ることができる。

f:id:yohei-a:20180408230329p:image:w640


参考


関連

*1:細かすぎて伝わらない例えかもしれない。。。

*2http://wazanova.jp/post/62392993571/30-netflix-amzazon

2018-03-31

「Oracleの基本 〜データベース入門から設計/運用の初歩まで」の紹介

株式会社コーソルの 渡部さんOracle ACE)から献本いただいた「Oracleの基本 〜データベース入門から設計/運用の初歩まで」の紹介です。

一言で言うと新卒研修でデータベースの教科書として最適な本だと思います。

渡部さんとは JPOUG などのコミュニティ活動で以前から交流があり、コーソル社の社内勉強会にも何度かお邪魔したこともあります。Oracle 関連のイベントにお手伝いに来られた新卒ホヤホヤの方と挨拶したと思ったら数年後には第一線の現場で一緒に仕事させていただいたりしていましたが、ITの知識がなかった新卒や中途入社の方が数年後には一流のDBエンジニアとして第一線の現場やイベントの発表などで活躍されていて、データベース*1を勉強するには最もよい会社の一つだと思っていました。そのコーソル社のエンジニア育成で培われたノウハウが詰まった一冊だと思います。

敢えてアーキテクチャの説明を必要最低限に抑えて、Oracle Database をインストールして使いながら一通りの機能を使いながらウォークスルーする構成になっていて、コーソル社の育成の現場で培われたノウハウが詰まっていることが感じとれます。

初心者が資格取得から始めると暗記科目のようになってしまい、業務で一通り触れてからとなると1年以上はかかってしまったりしますが、本書は初心者が Oracle Database を最初に学ぶ上での高速道路になると思います。

また、ただの機能説明だけではなく著者陣の経験から得られたハマりポイントやなぜそうするかが散りばめられており、初心者ではなくても気づきがあるのではないかと思います。



オススメの読み方

Oracle Database を使ったことがない初心者の方が手を動かしながら通読するのがオススメです。ORACLE MASTER 取得や DB エンジニアを目指されているか方もまずはこの本を Oracle Database を使いながら通読するのが一番の近道ではないかと思います。


対象読者


一部引用

  • はじめに(P.3-4)

そこで,本書はOracle独自の用語の使用を最小限にとどめ,次の2点を考えながら執筆しました。

これらの解説ノウハウは,弊社コーソルの新人教育で培われたものです。コーソルの新人教育には,約2週間という短い期間で多くの新卒エンジニアORACLE MASTER Bronze DBAに合格させているという実績があります。さらに最近では,IT 未経験の新人エンジニアが,入社から2年半で,ORACLE MASTER Platinum(2日間の実技試験により認定されるORACLE MASTERの最上位資格)を取得するような例も出てきています。本書には,コーソルの新人エンジニアの生の声を反映させ,ノウハウを惜しみなく注ぎ込みました。

Oracleの基本 ?データベース入門から設計/運用の初歩まで:書籍案内|技術評論社
  • おわりに(P.353)

入門書という位置づけから、本書では、機能や使用方法に重点をおいて説明しました。よって、アーキテクチャについての説明を割愛しているところがあります。しかし、ひととおり、 Oracle を使えるようになったら、アーキテクチャにも目を向けてみてください。エンジニアであれば、「ソフトウェアがどうやって動いているか」ということに興味を持つのは自然なことですし、なにより、アーキテクチャを知っているかどうかで、理解度スキルの伸びに大きな差が出てきます。


目次

はじめに
本書について
第1章 データベースを知る
1.1 なぜデータベースは必要なのか
1.2 リレーショナルデータベースの基礎
本書の構成
第2章 Oracleを使ってみる
2.1 データベースを構築する
2.2 データベースに接続する
2.3 データベースを起動/停止する
2.4 学習用ユーザーを作成する
2.5 テーブルとデータ操作の基本
第3章 より高度なデータ操作を学ぶ
3.1 データを複雑な条件で検索する
3.2 データを加工/集計する
3.3 NULLとIS NULL条件
3.4 SELECT文とSELECT文を組み合わせる
3.5 テーブルを結合する
3.6 データの表示画面にこだわる
3.7 トランザクションでデータを安全に更新する
第4章 データをより高速に/安全に扱うしくみ
4.1 検索処理を高速化するインデックス
4.2 SELECT文をシンプルにまとめるビュー
4.3 不正なデータの混入を防ぐ制約
4.4 連番を振り出すシーケンス
4.5 セキュリティ機構の基礎となるユーザー機能
4.6 ユーザー権限を制御する
第5章 テーブル設計の基本を知る
5.1 テーブル設計とは
5.2 第1ステップ‐概念設計
5.3 第2ステップ‐論理設計
5.4 第3ステップ‐物理設計
第6章 データベース運用/管理のポイントを押さえる
6.1 データベースにおける運用/管理の重要性
6.2 バックアップを取ってデータを守る
6.3 データベースのメンテナンス
6.4 データベースを監視する
6.5 ネットワーク環境/本番環境でOracleに接続する
6.6 トラブルに立ち向かうためには
おわりに
索引
著者略歴
監修者略歴

*1データベースを勉強するなら Oracle Database から入るのがオススメです

2018-03-30

AWR Formatter を使ってみた

渡部さんがツイートされていて知った AWR Formatter を知ってみた。


AWR Formatter とは

(3)AWR Formatterの紹介

知っている方も多いと思いますが、念のためにAWR Formatterツールを紹介します。

AWR Formatter は、AWRを分かり易くフォーマットしてくれる、chromeのplugin機能になります。これで分析すると楽になるので使用してみてください(以下はSQL統計の出力例で、必要な項目をマージして表示しています)。詳細は、http://tylermuth.wordpress.com/2011/04/20/awr-formatter/ を参照してください。

f:id:yohei-a:20180331020515p:image

第32回 SQL統計と実行計画の出力について

Thanks to Tom Kyte, Graham Wood, Robert Freeman and Tom Roach for your contributions.

AWR Formatter « Tyler Muth’s Blog

ということで錚々たるメンバーが関わってますね。


インストール

% git clone https://github.com/anjuls/AWR-Format.git

使い方

  • Chrome で AWRレポート(HTML)を開く。
  • メニューで [Format AWR] をクリックする。

環境

2018-03-07

screen メモ

インストール

sudo yum -y install screen

使う

  • 起動する
screen
  • デタッチ
ctrl-a d
  • 一覧
screen -ls
  • アタッチ
screen -r <pid>
  • 横取りアタッチ
screen -dr <pid>

参考

2018-03-04

macOS上でLinuxアプリケーションをそのまま動作させるアプリ ケーション Noah を使ってみた

7. macOSやWindowsでLinuxバイナリを動かすプログラムを作った話 (ぬるぽへ) で聞いた Noahインストールして使ってみた。

f:id:yohei-a:20180304143528p:image:w640


Noahとは

ハイパーバイザ技術を用いたクロスOSなLinuxバイナリ互換プラットフォームの構築

佐伯 学哉・西脇 友一

ー Noah : Hypervisor-Based Darwin Subsystem for Linux


Noah

NoahはmacOS上でLinuxアプリケーションをそのまま動作させるアプリケーションです。ハイパーバイザを用いた新しい手法で、従来のバイナリ互換技術よりも安全かつ高速なLinuxエミュレーションを実現。Noahを使えば、apt-getやLinux向けgcc、それにあなたがこれから作る新しいLinuxアプリケーションが、そのままmacOSで動作します。


もう移植を待つ必要も、する必要もありません。

Noahの登場と、最近登場したWSLやLinuxulatorの組み合わせで、Linuxアプリケーションさえ開発すれば、それがそのままmacOS, Windows,FreeBSD, Linuxの4つの主要なOSで動作します。LinuxはいまやPOSIXに替わる次世代のリッチな標準開発規格です。

https://www.ipa.go.jp/files/000059135.pdf

Noah が開発された背景やメリット、アーキテクチャなどは Noah Hypervisor-Based Darwin Subsystem for Linux に詳しく書かれています。


インストール

% brew install linux-noah/noah/noah

起動する

% noah
Noah is installing the initial filesystem in ~/.noah/tree. Proceed? [Y/n] Y
Password:

(中略)

Noah is still under development, so please enable it at your own risk! [y/N] y

(中略)

I have no name!@186590d05b55:~$
I have no name!@186590d05b55:~$ ls -1
AWS Schema Conversion Tool
Applications
Books
Desktop
Documents
Downloads

遊んでみる

  • Noah で perl を実行する
I have no name!@186590d05b55:/bin$ perl -le 'while(1){print qq/foo/}' > /dev/null
  • macOS から dtruss でシステムコールをトレースする
%  sudo dtruss -deflo -p 3759
Password:
	PID/THRD  RELATIVE  ELAPSD    CPU SYSCALL(args) 		 = return

(中略)

 4507/0xa56f:  15708753       3      2 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708760       4      2 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708767       4      2 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708775       4      2 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708782       4      2 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708789       3      1 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708796       4      2 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
 4507/0xa56f:  15708814       6      3 writev(0x1, 0x7FFF50A8C450, 0x1)		 = 4 0
  • アクティビティモニタで見てみる

f:id:yohei-a:20180304142335p:image:w640

f:id:yohei-a:20180304142328p:image:w640

  • 起動時のシステムコールトレースをとってみる
%  sudo dtruss -deflo sudo -u azekyohe noah 2>dtruss.log
% grep -C 5 noah  dtruss.log
 6323/0x112ba:      6904       3      2 read_nocancel(0x6, "##\n# Group Database\n# \n# Note that this file is consulted directly only when the system is running\n# in single-user mode.  At other times this information is provided by\n# Open Directory.\n#\n# See the opendirectoryd(8) man page for additional information ab", 0x1000)		 = 2600 0
 6323/0x112ba:      6985       1      0 read_nocancel(0x6, "s:*:53:\n_mcxalr:*:54:\n_appleevents:*:55:\n_geod:*:56:\n_serialnumberd:*:58:\n_devdocs:*:59:\n_sandbox:*:60:\nlocalaccounts:*:61:\nnetaccounts:*:62:\n_mdnsresponder:*:65:\n_uucp:*:66:\n_ard:*:67:\ndialer:*:68:\nnetwork:*:69:\n_www:*:70:_devicemgr,_teamsserver\n_eppc:*:7", 0x1000)		 = 0 0
 6323/0x112ba:      6990       4      3 close_nocancel(0x6)		 = 0 0
 6323/0x112ba:      7042       6      5 setgroups(0xD, 0x7FAA33822AA8, 0x1000)		 = 0 0
 6323/0x112ba:      7047       4      3 seteuid(0x3DD45FE0, 0x7FAA33822AA8, 0x1000)		 = 0 0
 6323/0x112ba:      7069      15     14 stat64("/Users/azekyohe/.pyenv/shims/noah\0", 0x7FAA32D03420, 0x1000)		 = -1 Err#2
 6323/0x112ba:      7072       2      1 stat64("/Users/azekyohe/.pyenv/bin/noah\0", 0x7FAA32D03420, 0x1000)		 = -1 Err#2
 6323/0x112ba:      7082       9      8 stat64("/usr/local/bin/noah\0", 0x7FAA32D03420, 0x1000)		 = 0 0
 6323/0x112ba:      7088       4      3 seteuid(0x0, 0x7FAA32D03420, 0x1000)		 = 0 0
 6323/0x112ba:      7089       1      0 setuid(0x0, 0x7FAA32D03420, 0x1000)		 = 0 0
 6323/0x112ba:      7093       4      3 setegid(0x0, 0x7FAA32D03420, 0x1000)		 = 0 0
 6323/0x112ba:      7095       1      0 setgroups(0x16, 0x7FAA34001CF0, 0x1000)		 = -1 Err#22
 6323/0x112ba:      7098       3      1 sysctl([CTL_KERN, 18, 0, 0, 0, 0] (2), 0x7FFF592A3364, 0x7FFF592A3368, 0x0, 0x0)		 = 0 0
--
--
 6324/0x112c6:      8130       1      0 lseek(0x3, 0x0, 0x1)		 = 0 0
 6324/0x112c6:      8140       3      2 read(0x3, "/System/Library/Perl/Extras/5.18\n\004\b\0", 0x2000)		 = 33 0
 6324/0x112c6:      8141       1      0 read(0x3, "@\004\b\0", 0x2000)		 = 0 0
 6324/0x112c6:      8146       5      3 close(0x3)		 = 0 0
 6324/0x112c6:      8156       8      6 stat64("/System/Library/Perl/Extras/5.18/darwin-thread-multi-2level\0", 0x7FFF52ABB390, 0x2000)		 = 0 0
 6324/0x112c6:      8174      12     11 open("/usr/local/bin/noah\0", 0x0, 0x1B6)		 = 3 0
 6324/0x112c6:      8176       1      0 ioctl(0x3, 0x4004667A, 0x7FFF52ABB29C)		 = -1 Err#25
 6324/0x112c6:      8178       1      0 ioctl(0x3, 0x40487413, 0x7FFF52ABB2A0)		 = -1 Err#25
 6324/0x112c6:      8179       1      0 lseek(0x3, 0x0, 0x1)		 = 0 0
 6324/0x112c6:      8188       1      0 fcntl(0x3, 0x2, 0x1)		 = 0 0
 6324/0x112c6:      8195       2      1 fstat64(0x3, 0x7FFF52ABB6B0, 0x1)		 = 0 0
--
--
 6324/0x112c6:     60900      12     10 open_nocancel("/etc/.mdns_debug\0", 0x0, 0x0)		 = -1 Err#2
 6324/0x112c6:     60904       1      0 issetugid(0x7FFFA3A8422A, 0x0, 0x0)		 = 0 0
 6324/0x112c6:     60905       1      0 issetugid(0x7FFFA3A8422A, 0x0, 0x0)		 = 0 0
 6324/0x112c6:     61089       2      0 getuid(0x7FFFA3A8422A, 0x0, 0x0)		 = 1037328352 0
 6324/0x112c6:     61473       3      1 fcntl(0x3, 0x2, 0x1)		 = 0 0
 6324/0x112c6:     61695       9      7 stat64("/Users/azekyohe/.noah\0", 0x7F96AE001270, 0x1)		 = 0 0
 6324/0x112c6:     61702       6      5 stat64("/Users/azekyohe/.noah/tree\0", 0x7F96AE001270, 0x1)		 = 0 0
 6324/0x112c6:     61705       1      0 geteuid(0x7F96ADC427E0, 0x7F96Adtrace: error on enabled probe ID 2109 (ID 266: syscall::execve:return): invalid address (0x7f96adc0a6e0) in action #12 at DIF offset 24
E001270, 0x1)		 = 1037328352 0
--
 6324/0x112c6:     61705       1      0 geteuid(0x7F96ADC427E0, 0x7F96Adtrace: error on enabled probe ID 2109 (ID 266: syscall::execve:return): invalid address (0x7f96adc0a6e0) in action #12 at DIF offset 24
E001270, 0x1)		 = 1037328352 0
 6324/0x112c6:     61715       7      7 stat64("/usr/local/Cellar/noah/0.5.0/libexec/noah\0", 0x7F96AE001270, 0x1)		 = 0 0
 6324/0x112c6:     61778       2      1 lseek(0x3, 0x75C, 0x0)		 = 1884 0
 6324/0x112c6:     61779       1      0 lseek(0x3, 0x0, 0x1)		 = 1884 0
 6324/0x112c6:     61796       7      5 pipe(0x3, 0x0, 0x1)		 = 4 0
 6324/0x112c6:     61805       2      0 sigprocmask(0x1, 0x7FFF52ABB9A4, 0x7FFF52ABB9A0)		 = 0x0 0
 6324/0x112c6:     62642     805    803 fork()		 = 6325 0
--
--
 6325/0x112c9:      5884       4      3 seteuid(0x3DD45FE0, 0x7FFF5645CAB8, 0x1)		 = 0 0
 6325/0x112c9:      5903      12      9 sysctlbyname(kern.hv_support, 0xF, 0x7FFF5645E76C, 0x7FFF5645E760, 0x0)		 = 0 0
 6325/0x112c9:      5971      29     27 stat64("/\0", 0x7FFF5645CA10, 0x7FFF5645E76C)		 = 0 0
 6325/0x112c9:      5992      19     17 getattrlist("/Users\0", 0x7FFFA3A2EB04, 0x7FFF5645E320)		 = 0 0
 6325/0x112c9:      6009      17     16 getattrlist("/Users/azekyohe\0", 0x7FFFA3A2EB04, 0x7FFF5645E320)		 = 0 0
 6325/0x112c9:      6019       9      8 getattrlist("/Users/azekyohe/.noah\0", 0x7FFFA3A2EB04, 0x7FFF5645E320)		 = 0 0
 6325/0x112c9:      6024       5      4 getattrlist("/Users/azekyohe/.noah/tree\0", 0x7FFFA3A2EB04, 0x7FFF5645E320)		 = 0 0
 6325/0x112c9:      6541       9      4 mmap(0x0, 0x40000000, 0x7, 0x1201, 0xFFFFFFFF, 0x0)		 = 0x109DC3000 0
 6325/0x112c9:      6656       2      0 sigaction(0x1, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6657       1      0 sigaction(0x2, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6658       0      0 sigaction(0x3, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6659       0      0 sigaction(0x4, 0x0, 0x7FFF5645E738)		 = 0 0
--
--
 6325/0x112c9:      6677       0      0 sigaction(0x1C, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6678       0      0 sigaction(0x1D, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6679       0      0 sigaction(0x1E, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6680       1      0 sigaction(0x1F, 0x0, 0x7FFF5645E738)		 = 0 0
 6325/0x112c9:      6687       1      0 sigprocmask(0x0, 0x0, 0x7FFF5645E738)		 = 0x0 0
 6325/0x112c9:      6715      23     22 open("/Users/azekyohe/.noah/tree\0", 0x100000, 0x0)		 = 3 0
 6325/0x112c9:      6732       2      0 getrlimit(0x1008, 0x7FFF5645E730, 0x0)		 = 0 0
 6325/0x112c9:      6741       2      1 fcntl(0x0, 0x1, 0x0)		 = 0 0
 6325/0x112c9:      6742       1      0 fcntl(0x1, 0x1, 0x97C6B00)		 = 0 0
 6325/0x112c9:      6743       1      0 fcntl(0x2, 0x1, 0x97C6B00)		 = 0 0
 6325/0x112c9:      6744       0      0 fcntl(0x4, 0x1, 0x97C6B00)		 = -1 Err#9

参考

sysbench で MySQL のベンチマークをとる

sysbench をインストールして MySQL のベンチマークをとる手順をメモ。


インストール

$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
$ sudo yum -y install sysbench mysql

ベンチマーク

  • 初期データロード
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
 --db-driver=mysql \
 --table-size=100000 \
 --mysql-host=aurora01.*********.ap-northeast-1.rds.amazonaws.com \
 --mysql-user=awsuser \
 --mysql-password=********* \
 --mysql-db=mydb \
 --db-ps-mode=disable \
 prepare
  • ベンチマークを実行する。
$ sysbench /usr/share/sysbench/oltp_read_write.lua \
 --db-driver=mysql \
 --table-size=100000 \
 --mysql-db=mydb \
 --mysql-host=aurora01.*********.ap-northeast-1.rds.amazonaws.com \
 --mysql-user=awsuser \
 --mysql-password=********* \
 --time=300 \
 --db-ps-mode=disable \
 --threads=16 \
 run

モニタリングする

> use mydb;
> set autocommit=0;
> select @@global.autocommit,@@session.autocommit;
+---------------------+----------------------+
| @@global.autocommit | @@session.autocommit |
+---------------------+----------------------+
|                   1 |                    0 |
+---------------------+----------------------+
1 row in set (0.02 sec)

>  update members set name = 'aze';
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

> select * from information_schema.innodb_trx;
  • History list length を確認する。
> pager egrep -A 5 '^TRANSACTIONS'
> show engine innodb status\G
TRANSACTIONS
------------
Trx id counter 70715803
Purge done for trx's n:o < 70591422 undo n:o < 0 state: running but idle
History list length 666
LIST OF TRANSACTIONS FOR EACH SESSION:
  • バイナリログを見る。
> show binary logs;
(中略)
| mysql-bin-changelog.000149 | 134264241 |
| mysql-bin-changelog.000150 | 134218252 |
| mysql-bin-changelog.000151 | 134218203 |
| mysql-bin-changelog.000152 |  24293043 |
| mysql-bin-changelog.000153 |  51085842 |
| mysql-bin-changelog.000154 | 108366756 |
| mysql-bin-changelog.000155 | 134218418 |
| mysql-bin-changelog.000156 |  18849396 |
| mysql-bin-changelog.000157 |       120 |
+----------------------------+-----------+
153 rows in set (0.02 sec)


参考