SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
MySQL 5.6 新機能解説
                               @ db tech showcase 2012




奥野 幹也
@nippondanji
mikiya (dot) okuno (at) gmail (dot) com
免責事項
●   本プレゼンテーションにおいて示されている見解は、私自身
    の見解であって、オラクル・コーポレーションの見解を必ず
    しも反映したものではありません。ご了承ください。
自己紹介
●   MySQL サポートエンジニア
     –   2000 年にサン・マイクロシステムズ入社
            ●   主にハードウェアのサポートを担当
     –   2007 年に MySQL KK へ転職
            ●   気付くとまたサン・マイクロシステムズに・・・
     –   現在は日本オラクルに在席。
     –   サポート一筋 12 年
●   日々のしごと
     –   MySQL トラブルシューティング全般
     –   Q&A 回答
         など
●   ブログ
     –   漢のコンピュータ道
     –   http://nippondanji.blogspot.com/
MySQL 5.6
新機能ダイジェスト
MySQL 5.6 リリース候補版登場!
●   MySQL Connect 2012 において MySQL 5.6 リリース候
    補版( RC = Release Candidate )が発表された。
     –   MySQL Connect は Oracle OpenWorld と並んで US で
          開催されたイベント
●   リリース候補版≒ Feature Fix!!
     –   約 200 の Worklog に対応
     –   機能は開発版( DRM = Development Milestone
          Release )で徐々に追加するという開発モデル
●   MySQL 5.5GA (2010年 12 月)以来のメジャーアップ
    デート
     –   マイナーバージョンではありません。
     –   正式版( GA = General Availability )までしばらくお待ち
          を!!
レプリケーション
●   GTID – Global Transaction ID
     –   スレーブの自動的な昇格が可能に!!
●   クラッシュセーフなスレーブ
●   遅延レプリケーション
●   mysqlbinlog コマンドによるバイナリログのバックアップ
●   スレーブが使用する NIC の指定
●   マルチスレッドスレーブ
     –   スレーブ SQL スレッドが複数のスレッドで実行可能に!!
     –   DB 単位での並列処理
InnoDB
●   インデックスの追加と削除がオンラインで可能に!!
●   FULLTEXT インデックスのサポート
●   .ibd ファイル(テーブル単位のデータファイル)のエクス
    ポートとインポート
     –   ファイルのコピー+ α の操作他のサーバーへ移行可能!!
●   ページサイズの指定( 16KB→4KB/8KB/16KB )
●   インデックス統計情報の改善
●   START TRANSACTION READ ONLY
●   ログサイズの上限が増加( 4GB→512GB )
●   デッドロック検出機能の改善
●   CPU スケーラビリティの向上
●   バッファプールの内容を保存、再起動時に暖機運転
●   memcached インターフェイス
オプティマイザ
●   サブクエリの高速化
     –   semi-join 最適化
     –   FROM 句のサブクエリの評価遅延
●   EXPLAIN の改善
     –   SELECT 以外の DML へ対応
●   各種アルゴリズムの改善
     –   ORDER BY ... LIMIT の効率化
     –   Batched Key Access Join
     –   Index Condition Pushdown
     –   Multi Range Read
●   オプティマイザトレース
パーティショニング
●   パーティションをテーブル同士で交換可能に
●   パーティション数の上限増加( 1024→8192 )
●   明示的なパーティションの指定
●   テーブルロックの改善
     –   テーブルロックの対象がテーブル全体からパーティション
          単位に
その他
●   セキュリティ関係
●   ジャイアントロックの解消
●   ホストキャッシュの参照
●   OpenGIS 対応
●   小数点以下の秒への対応
●   ストアドルーチンにおけるエラーハンドリングの改善
      –   Diagnostic Area




    参考:開発スピードアクセル全開ぶっちぎり!日本よ、これが MySQL 5.6 だッ!!
    http://nippondanji.blogspot.com/2012/10/mysql-56.html
時間の都合上
すべてをお見せすることが
   できません。
あまりにもたくさん
目覚しい新機能が
 あるからです!
レプリケーション
MySQL のレプリケーション

       アプリケーション


1. COMMIT           4-1. send_ok




             接続                    スレーブ接続             I/O               SQL
            スレッド       2.
                                    スレッド             スレッド              スレッド
                            バ
                              イ
                            更 ナリ                      5. リレーログ更新
     3. テーブル                 新 ロ       4-2. バイナリログ
        更新                         グ        送信                     6. 更新の適用




            ストレージ                  バイナリログ            リレーログ             ストレージ
            エンジン                                                       エンジン

                      マスター                                   スレーブ
MySQL のレプリケーション(つづき)
     マスター / スレーブ                                      マルチマスター


 Master                Slave                Master                    Master
                                            + Slave                   + Slave



                                   カスケード

             Master                 Slave                 Slave



                                                                循環型
             1:N
                                               Master
                           Slave               + Slave
    Master
                                                                         Master
                                                                         + Slave


                   Slave


    Slave                                             Master
                                                      + Slave
MySQL 5.5 のおさらい
                      準同期レプリケーション
                                         COMMIT 完了時にはスレーブへ更新が到達している
                                         ることが保証されている。
       アプリケーション
                                         → HA (高可用性)として利用可能か!?
1. COMMIT           7. send_ok




                        6-1-2. ack                 6-1-1. ack

             接続                    スレーブ接続                   I/O                    SQL
            スレッド       2.
                                    スレッド                   スレッド                   スレッド
                            バ
                              イ
                            更 ナリ                                5. リレーログ更新
     3. テーブル                 新 ロ       4. バイナリログ
        更新                         グ       送信                                6-2. 更新の適用




            ストレージ                  バイナリログ                 リレーログ                   ストレージ
            エンジン                                                                  エンジン

                      マスター                                             スレーブ
準同期レプリケーションによる HA
●   できるようになったこと        ●   できなかったこと
    –   マスタークラッシュ時に        –   スレーブの昇格
          スレーブにデータが残             ●   1:N 構成
          る                –   スレーブのクラッシュへ
    –   1:1 構成                  の対応
                                 ●   クラッシュ時は再
                                      セットアップ
Global Transaction ID
●   トランザクションを一意に識別することができる ID
     – UUID: トランザクション ID の形式で表現される
     –   例) 095E0FF8-18AF-11E2-9E7C-5C260A2AA986:123456
●   トランザクション ID はシーケンス
     –   1:N 環境で、どのスレーブが最も進んでいるか一目瞭然!
●   MASTER_AUTO_POSITION = 1
Global Transaction ID (つづき)
mysql> show binlog events in 'mysql-bin.000002'G

                       〜 省略 〜

*************************** 3. row ***************************
   Log_name: mysql-bin.000002
        Pos: 151
 Event_type: Gtid
  Server_id: 1
End_log_pos: 199
       Info: SET @@SESSION.GTID_NEXT= '095E0FF8-18AF-11E2-9E7C-
5C260A2AA986:1'

                       〜 省略 〜
Global Transaction ID (つづき)
mysql> SHOW SLAVE STATUSG
*************************** 1. row ***************************
                            〜略〜
                  Master_UUID:    095e0ff8-18af-11e2-9e7c-5c260a2aa986
             Master_Info_File:    /path/to/datadir/master.info
                    SQL_Delay:    0
          SQL_Remaining_Delay:    NULL
      Slave_SQL_Running_State:    Slave has read all relay log; waiting for the
slave I/O thread to update it
           Master_Retry_Count:    86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:    095E0FF8-18AF-11E2-9E7C-5C260A2AA986:1
            Executed_Gtid_Set:    095E0FF8-18AF-11E2-9E7C-5C260A2AA986:1
1 row in set (0.00 sec)
マスター昇格時の操作 - ビフォー
SHOW BINLOG EVENTS 等でそれぞれのサーバーのバイナリログの内容を比較するなど
によって昇格するサーバーの対応するバイナリログポジションを調べて・・・


mysql> change master to master_host='127.0.0.1',
    -> master_port=13032,
    -> master_user = 'rsandbox',
    -> master_password = 'rsandbox',
    -> master_log_file = 'mysql-bin.123456' ,
    -> master_log_pos = 123456 ;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
マスター昇格時の操作 - アフター
mysql> change master to master_host='127.0.0.1',
    -> master_port=13032,
    -> master_auto_position = 1 ;
Query OK, 0 rows affected (0.03 sec)

mysql> start slave user='rsandbox' password='rsandbox';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysqlfailover
●   マスターの自動的なフェイルオーバーを実行するツール
●   MySQL Workbench に付属
    –   MySQL Utilities の一部
           ●   他にも便利なツールが!!
    –   Python 製
mysqlfailover サンプル
shell> mysqlfailover --master=root:msandbox@127.0.0.1:13032 
--slaves=root:msandbox@127.0.0.1:13033,root:msandbox@127.0.0.1:13034

MySQL Replication Failover Utility
Failover Mode = auto     Next Interval = Thu Oct 18 22:42:14 2012

Master Information
------------------
Binary Log File    Position   Binlog_Do_DB   Binlog_Ignore_DB
mysql-bin.000006 191

Replication Health Status
+------------+--------+---------+--------+------------+---------+
| host       | port   | role    | state | gtid_mode | health |
+------------+--------+---------+--------+------------+---------+
| 127.0.0.1 | 13032 | MASTER | UP        | ON         | OK      |
| 127.0.0.1 | 13033 | SLAVE     | UP     | ON         | OK      |
| 127.0.0.1 | 13034 | SLAVE     | UP     | ON         | OK      |
+------------+--------+---------+--------+------------+---------+



Q-quit R-refresh H-health G-GTID Lists U-UUIDs
mysqlfailover フェイルオーバー
MySQL Replication Failover Utility
Failover Mode = auto     Next Interval = Thu Oct 18 22:43:31 2012

Master Information
------------------
Binary Log File    Position   Binlog_Do_DB   Binlog_Ignore_DB
mysql-bin.000003 621

Replication Health Status
+------------+--------+---------+--------+------------+---------+
| host       | port   | role    | state | gtid_mode | health |
+------------+--------+---------+--------+------------+---------+
| 127.0.0.1 | 13033 | MASTER | UP        | ON         | OK      |
| 127.0.0.1 | 13034 | SLAVE     | UP     | ON         | OK      |
+------------+--------+---------+--------+------------+---------+




Q-quit R-refresh H-health G-GTID Lists U-UUIDs
クラッシュセーフなスレーブ
●   以前のバージョン                ●   MySQL 5.6




           InnoDB


        クラッシュセーフ
                                          InnoDB

                                    レプリケーション情報
                                             =
       レプリケーション情報                mysql.slave_relay_log_info
                =                         テーブル
      relay_log_info ファイル
     InnoDB の更新とは非同期
フェイルオーバーのための
          スレーブ用オプション
server_id=1
log_bin=mysql-bin

gtid_mode=on
log_slave_updates
disable_gtid_unsafe_statements
master_info_repository=TABLE
relay_log_info_repository=TABLE
report_host=hostname
report_port=3306
InnoDB
オンライン DDL
●   MySQL 5.1 ビルトインまで
     –   新しい定義のテーブルを作成してすべてのデータをコピー
     –   ALTER TABLE 中はテーブルの参照のみ可能
     –   更新は ALTER が終わるまでブロックされる
●   MySQL 5.1 InnoDB Plugin 〜 5.5
     –   セカンダリインデックス追加時はデータのコピーをせずイン
          デックスだけを構築
     –   インデックス構築中は参照のみ可能
●   MySQL 5.6
     –   インデックス構築中の更新が可能に! New
     –   特殊なオプション等は特に必要なし
テーブルスペースの
             エクスポート / インポート
●   テーブルを .ibd ファイルのコピーで他のマシンへ移行可能
     –   innodb_file_per_table
     –   MySQL 5.5 まではよくある間違いで、その操作はできな
           かった。
●   MySQL 5.6 で実施可能に!
     –   FLUSH TABLES t FOR EXPORT
テーブルスペースの
         エクスポート / インポート手順
●   移行元
    –   FLUSH TABLES t FOR EXPORT;
    –   .ibd ファイルと .cfg ファイルをコピー
    –   UNLOCK TABLES;
●   移行先
    –   テーブルの入れ物を作っておく
           ●   CREATE TABLE t (…) ENGINE INNODB;
           ●   ALTER TABLE t DISCARD TABLESPACE;
    –   .ibd ファイルと .cfg ファイルをデータベースディレクトリ内
           にコピー
    –   ALTER TABLE t IMPORT TABLESPACE;
デッドロック検出機能
●   検出ロジックが高速に
●   エラーログに情報を出力
    –   innodb_print_all_deadlocks
デッドロックのログサンプル
InnoDB: transactions deadlock detected, dumping detailed information.
121018 2:28:28
*** (1) TRANSACTION:
TRANSACTION 6426, ACTIVE 16 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 376, 2 row lock(s), undo log entries 1
MySQL thread id 1, OS thread handle 0x7f126453c700, query id 53 localhost msandbox
updating
update t set b='sss' where a=1
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 6 page no 3 n bits 72 index `PRIMARY` of table `test`.`t` trx id
6426 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
 0: len 4; hex 00000001; asc     ;;
 1: len 6; hex 000000001917; asc       ;;
 2: len 7; hex 13000001890110; asc        ;;
 3: len 3; hex 747474; asc ttt;;

*** (2) TRANSACTION:
TRANSACTION 6423, ACTIVE 65 sec starting index read

                                       〜略〜

*** WE ROLL BACK TRANSACTION (2)
CPU スケーラビリティの向上
●   MySQL Connect のキーノートスピーチで言及された数値
     –   R/W sysbench … MySQL 5.5 比で 151% 改善!
     –   Read Only sysbench … MySQL 5.5 比で 234% 改善!
     –   http://medianetwork.oracle.com/video/player/1873154739001
●   kernel_mutex における処理の分散
●   リードオンリートランザクション
     –   更新の準備が不要なためオーバーヘッドが小さい
             ●   START TRANACTION READ ONLY
             ●   autocommit=1 における SELECT
フラッシュのアルゴリズム改善
●   Adaptive Flushing の細かなチューニング
     –   リソースが不足しそうになるとよりアグレッシブなフラッシュ
          を開始する low water mark を指定可能に
            ●   innodb_adaptive_flushing_lwm
            ●   innodb_max_dirty_pages_pct_lwm
     –   リソースが逼迫した時の I/O の量を指定可能に
            ●   innodb_io_capacity_max
     –   フラッシュ動作変更の間隔を指定可能
            ●   innodb_flushing_avg_loops
●   フラッシュ専用のバックグラウンドスレッド pager_cleaner
     –   毎秒起動
     –   innodb_lru_scan_depth でスレッドが検査するサイズを
           指定可能
●   ストレージに合わせたフラッシュ動作
     –   innodb_flush_neighbors
memcached プラグイン
     MySQL     MySQL              MySQL              memcached   memcached
    クライアント    クライアント             クライアント               クライアント      クライアント


ポート 3306                                                              ポート 11211
             接続スレッド




                        接続スレッド



                       SQL パーサ     接続スレッド              memcached
                      オプティマイザ等                          プラグイン




                                            InnoDB


                                   MySQL サーバー
オプティマイザ
〜 MySQL 5.5
              Nested Loop Join
SELECT … FROM t1 JOIN t2 ON … WHERE ...




for each row in t1 matching where condition {
  for each row in t2 matching join and where condition {
    send joined row to client
  }
}
〜 MySQL 5.5
     Block Nested Loop Join
t1                                              t2

                                        スキャン
        1. WHERE 句の条件に沿って
        t1 からレコードをフェッチし
        バッファに格納


                                 2. バッファが満タンに
                                 なったら t2 を
                                 スキャンして JOIN


      3. t1 のすべての
      レコードについて
      くりかえし       JOIN Buffer




                 Using Join Buffer...
MySQL 5.6 における
             オプティマイザ改善点
●   Disk Sweep Multi Range Read (MRR)
●   Batched Key Access Join (BKA)
●   Index Condition Pushdown (ICP)
●   ORDER BY … LIMIT の効率化
●   サブクエリのアルゴリズム改善
     –   Semi-Join
     –   FROM 句のサブクエリの改善
MRR がない場合
セカンダリインデックス              レコード




                レコードに
              ランダムアクセス
MRR がある場合
セカンダリインデックス                   レコード




                    MRR




              レコードの ROWID を
                バッファに格納し、
               ROWID でソート。
              ROWID 順でアクセス。
Batched Key Access Join
t1                                                   t2


        1. WHERE 句の条件に沿って
        t1 からレコードをフェッチし
        バッファに格納
                                  2. バッファが満タンに
                                  なったら MRR で t2 から
                                  レコードをフェッチして
                                  JOIN
                                          MRR
                                          Scan

      4. t1 のすべての                  3. ROWID の順で
      レコードについて                     t2 からレコードをフェッチ
      くりかえし         JOIN Buffer
Index Condition Pushdown
●   複合インデックスを用いたアクセスの効率化
●   (col1, col2, col3) というインデックスがある場合、これまで
    は WHERE col1=1 AND col3<10 というような条件では
    col3 はテーブルからレコードをフェッチする際に評価され
    なかった。
ICP がない場合
セカンダリインデックス                         レコード
 col1 col2 col3
                  col1=1 のすべての
                  レコードをフェッチ。
      :           col3 の条件は使われない。
 0    20    10
 1    3      4
 1    3     10
 1    3     20
 1    8      2
 1    9      9
 1    9     11
 1    9     15
 1    11     5
 1    11    13
 2    1      2
       :
ICP がある場合
セカンダリインデックス                           レコード
 col1 col2 col3
                  col1=1 かつ col3<10
                  の条件に合うレコード
       :          だけをフェッチ。
  0   20   10
  1    3   4
  1    3   10
  1    3   20                                フェッチされずに
  1    8   2                                 済んだレコード
  1    9    9
  1    9   11
  1    9   15
  1   11   5
  1   11   13
  2    1    2
       :
ORDER BY … LIMIT の効率化
●    SELECT column_list FROM single_table ORDER BY
    non_indexed_colum LIMIT n
     –   というような構造のクエリが速くなる。
     –   Using sort buffer...
●   従来のアルゴリズム
     –   すべての結果をソートしてから上位の n 個を返す
●   MySQL 5.6 のアルゴリズム
     –   ソートバッファに n 個のレコードが確実に格納出来るとわ
          かっている場合、上位の結果だけをソートバッファに格納
          する
     –   ソートバッファに収まらない場合は従来のアルゴリズム
Semi Join
●   相関サブクエリの効率を改善
     –   従来のアルゴリズム=外部クエリから1行フェッチするごと
          に、サブクエリを実行
     –   相関のないサブクエリは最初に1度だけ実行されるので遅
          くはない
●   従来は開発者が JOIN に書き換える必要があった。
     –   多くの場合は SELECT DISTINCT で対応可能
●   Semi Join とは、重複を含まないサブクエリのこと。外部ク
    エリ1行に対して最大で1行だけマッチする Join のこと。
     –   SQL には Semi Join に該当する Join はない。
MySQL 5.5 の例 - EXPLAIN
EXPLAIN SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT City.CountryCode FROM
City WHERE Name LIKE 'A%')G
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: Country
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 3
          ref: NULL
         rows: 247
        Extra: Using where; Using index
*************************** 2. row ***************************
           id: 2
  select_type: DEPENDENT SUBQUERY
        table: City
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4037
        Extra: Using where
2 rows in set (0.00 sec)
MySQL 5.5 の例 - SELECT
mysql> SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT
City.CountryCode FROM City WHERE Name LIKE 'A%')G
*************************** 1. row ***************************
COUNT(1): 71
1 row in set (0.26 sec)

mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+--------+
| Variable_name          | Value |
+-----------------------+--------+
| Handler_read_first     | 240   |
| Handler_read_key       | 240   |
| Handler_read_last      | 0     |
| Handler_read_next      | 239   |
| Handler_read_prev      | 0     |
| Handler_read_rnd       | 0     |
| Handler_read_rnd_next | 824291 |
+-----------------------+--------+
7 rows in set (0.00 sec)
MySQL 5.6 の例 - EXPLAIN
EXPLAIN SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT
City.CountryCode FROM City WHERE Name LIKE 'A%')G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: Country
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 3
          ref: NULL
         rows: 239
        Extra: Using where; Using index
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: <subquery2>
         type: eq_ref
possible_keys: <auto_key>
          key: <auto_key>
      key_len: 3
          ref: world.Country.Code
         rows: 1
        Extra: NULL                                       ・・・つづく
MySQL 5.6 の例 - EXPLAIN
                 つづき
*************************** 3. row ***************************
           id: 2
  select_type: MATERIALIZED
        table: City
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4188
        Extra: Using where
3 rows in set (0.00 sec)
MySQL 5.6 の例 - SELECT
mysql> SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT
City.CountryCode FROM City WHERE Name LIKE 'A%')G
*************************** 1. row ***************************
COUNT(1): 71
1 row in set (0.00 sec)

mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+-------+
| Variable_name          | Value |
+-----------------------+-------+
| Handler_read_first     | 2     |
| Handler_read_key       | 241   |
| Handler_read_last      | 0     |
| Handler_read_next      | 239   |
| Handler_read_prev      | 0     |
| Handler_read_rnd       | 0     |
| Handler_read_rnd_next | 4080 |
+-----------------------+-------+
7 rows in set (0.00 sec)
FROM 句のサブクエリ
●   評価の遅延
    –   マテリアライゼーションが実際にレコードが必要な場合だけ
         行われるように。
    –   EXPLAIN が高速化。
    –   WHERE 句の条件次第ではマテリアライゼーションが不要
         に。
●   マテリアライゼーションによって作成されたテンポラリテー
    ブルにインデックスを作成。
MySQL 5.5 の例
mysql> SELECT COUNT(1) FROM Country C1 JOIN (SELECT * FROM City) AS C2
ON (C1.Capital = C2.ID) WHERE C1.Name LIKE 'X%';
+----------+
| COUNT(1) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+-------+
| Variable_name          | Value |
+-----------------------+-------+
| Handler_read_first     | 2     |
| Handler_read_key       | 2     |
| Handler_read_last      | 0     |
| Handler_read_next      | 0     |
| Handler_read_prev      | 0     |
| Handler_read_rnd       | 0     |
| Handler_read_rnd_next | 4320 |
+-----------------------+-------+
7 rows in set (0.00 sec)
MySQL 5.6 の例
mysql> SELECT COUNT(1) FROM Country C1 JOIN (SELECT * FROM City) AS C2
ON (C1.Capital = C2.ID) WHERE C1.Name LIKE 'X%';
+----------+
| COUNT(1) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+-------+
| Variable_name          | Value |
+-----------------------+-------+
| Handler_read_first     | 1     |
| Handler_read_key       | 1     |
| Handler_read_last      | 0     |
| Handler_read_next      | 0     |
| Handler_read_prev      | 0     |
| Handler_read_rnd       | 0     |
| Handler_read_rnd_next | 240    |
+-----------------------+-------+
7 rows in set (0.00 sec)
まとめ
●   MySQL 5.6 には大幅な新機能が追加された。
     –   本日紹介したもの
           ●   レプリケーション
           ●   InnoDB
           ●   オプティマイザ
●   MySQL は急速に進化中!!
●   GA (正式版)リリースをお楽しみに。
ご静聴ありがとうございました。

Mais conteúdo relacionado

Mais procurados

MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveTakanori Sejima
 
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報yoyamasaki
 
ゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバーゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバーKimitoshi Takahashi
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)Shinya Sugiyama
 
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
[C21] MySQL Cluster徹底活用術 by Mikiya OkunoInsight Technology, Inc.
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -yoyamasaki
 
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama Insight Technology, Inc.
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理Insight Technology, Inc.
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間hiroi10
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法佐久本正太
 
今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7yoku0825
 
Windows環境でのMySQL
Windows環境でのMySQLWindows環境でのMySQL
Windows環境でのMySQLyoyamasaki
 
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料yoyamasaki
 
dimSTATから見るベンチマーク
dimSTATから見るベンチマークdimSTATから見るベンチマーク
dimSTATから見るベンチマークhiroi10
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはyoku0825
 

Mais procurados (18)

MySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slaveMySQL5.7 GA の Multi-threaded slave
MySQL5.7 GA の Multi-threaded slave
 
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
MySQL Cluster 解説 & MySQL Cluster 7.3 最新情報
 
ゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバーゆるふわMySQLフェイルオーバー
ゆるふわMySQLフェイルオーバー
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)
 
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
[C21] MySQL Cluster徹底活用術 by Mikiya Okuno
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -
 
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
 
C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理C13 SQL Server2012知られざるTips集 by 平山理
C13 SQL Server2012知られざるTips集 by 平山理
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法
 
今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7
 
Windows環境でのMySQL
Windows環境でのMySQLWindows環境でのMySQL
Windows環境でのMySQL
 
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
 
dimSTATから見るベンチマーク
dimSTATから見るベンチマークdimSTATから見るベンチマーク
dimSTATから見るベンチマーク
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLは
 

Destaque

5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB FlushingTakanori Sejima
 
MySQL5.6と5.7性能比較
MySQL5.6と5.7性能比較MySQL5.6と5.7性能比較
MySQL5.6と5.7性能比較hiroi10
 
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドYasufumi Kinoshita
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Sung wook Kang
 
MySQL5.6検証レポート
MySQL5.6検証レポートMySQL5.6検証レポート
MySQL5.6検証レポートHironori Miura
 
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターMasayuki Ozawa
 
Spiderの最新動向 20130419
Spiderの最新動向 20130419Spiderの最新動向 20130419
Spiderの最新動向 20130419Kentoku
 
Enter the-dolphine
Enter the-dolphineEnter the-dolphine
Enter the-dolphineMikiya Okuno
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMikiya Okuno
 
早くなったのか? MySQL5.5から5.6へのアップグレード事例
早くなったのか? MySQL5.5から5.6へのアップグレード事例早くなったのか? MySQL5.5から5.6へのアップグレード事例
早くなったのか? MySQL5.5から5.6へのアップグレード事例yoyamasaki
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイントMasayuki Ozawa
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Mikiya Okuno
 
ソーシャルゲームスケールアウトの歴史
ソーシャルゲームスケールアウトの歴史ソーシャルゲームスケールアウトの歴史
ソーシャルゲームスケールアウトの歴史Drecom Co., Ltd.
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史Insight Technology, Inc.
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたDrecom Co., Ltd.
 
NAT超えとはなんぞや
NAT超えとはなんぞやNAT超えとはなんぞや
NAT超えとはなんぞやnemumu
 

Destaque (20)

5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing
 
MySQL5.6と5.7性能比較
MySQL5.6と5.7性能比較MySQL5.6と5.7性能比較
MySQL5.6と5.7性能比較
 
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
 
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライド
 
Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석Windows 성능모니터를 이용한 SQL Server 성능 분석
Windows 성능모니터를 이용한 SQL Server 성능 분석
 
MySQL5.6検証レポート
MySQL5.6検証レポートMySQL5.6検証レポート
MySQL5.6検証レポート
 
SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
 
Spiderの最新動向 20130419
Spiderの最新動向 20130419Spiderの最新動向 20130419
Spiderの最新動向 20130419
 
Enter the-dolphine
Enter the-dolphineEnter the-dolphine
Enter the-dolphine
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
早くなったのか? MySQL5.5から5.6へのアップグレード事例
早くなったのか? MySQL5.5から5.6へのアップグレード事例早くなったのか? MySQL5.5から5.6へのアップグレード事例
早くなったのか? MySQL5.5から5.6へのアップグレード事例
 
待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、Sql server の改善ポイント
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
 
activerecord-turntable
activerecord-turntableactiverecord-turntable
activerecord-turntable
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
ソーシャルゲームスケールアウトの歴史
ソーシャルゲームスケールアウトの歴史ソーシャルゲームスケールアウトの歴史
ソーシャルゲームスケールアウトの歴史
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
 
NAT超えとはなんぞや
NAT超えとはなんぞやNAT超えとはなんぞや
NAT超えとはなんぞや
 

Semelhante a MySQL 5.6新機能解説@dbtechshowcase2012

PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介Masao Fujii
 
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!yoyamasaki
 
PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説Masao Fujii
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理junichi anno
 
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
 
JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)Yoshinori Nakanishi
 
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 ReplicationMikiya Okuno
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境yoyamasaki
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境yoyamasaki
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用についてLINE Corporation
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門Mikiya Okuno
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話Takahiro Okumura
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2学 松崎
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなしyoku0825
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介Midori Oge
 
Solr meeting in Japan 2011
Solr meeting in Japan 2011Solr meeting in Japan 2011
Solr meeting in Japan 2011Takahiko Ito
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像Amazon Web Services Japan
 

Semelhante a MySQL 5.6新機能解説@dbtechshowcase2012 (20)

PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
 
Introducing MySQL MHA (JP/LT)
Introducing MySQL MHA (JP/LT)Introducing MySQL MHA (JP/LT)
Introducing MySQL MHA (JP/LT)
 
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
MySQL Cluster7.3 GAリリース記念セミナー! MySQL & NoSQL 圧倒的な進化を続けるMySQLの最新機能!
 
PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説PostgreSQL V9 レプリケーション解説
PostgreSQL V9 レプリケーション解説
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
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
 
JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)JPUGしくみ+アプリケーション勉強会(第25回)
JPUGしくみ+アプリケーション勉強会(第25回)
 
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
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境5分で作るMySQL Cluster環境
5分で作るMySQL Cluster環境
 
LINEのMySQL運用について
LINEのMySQL運用についてLINEのMySQL運用について
LINEのMySQL運用について
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなし
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
 
Solr meeting in Japan 2011
Solr meeting in Japan 2011Solr meeting in Japan 2011
Solr meeting in Japan 2011
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像
 

Mais de Mikiya Okuno

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMikiya Okuno
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編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
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴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 InnoDBMikiya 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 2015Mikiya Okuno
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかMikiya Okuno
 
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜Mikiya Okuno
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきかMikiya Okuno
 
RDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるRDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるMikiya Okuno
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル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.09Mikiya Okuno
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okunoMikiya Okuno
 
Database qpstudy-okuno
Database qpstudy-okunoDatabase qpstudy-okuno
Database qpstudy-okunoMikiya Okuno
 

Mais de 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 トラブルシューティング 性能解析入門編
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴
 
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に手を出す前に〜
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
 
RDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考えるRDBにおけるバリデーションをリレーショナルモデルから考える
RDBにおけるバリデーションをリレーショナルモデルから考える
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
あなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデルあなたが知らない リレーショナルモデル
あなたが知らない リレーショナルモデル
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
カジュアルに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
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okuno
 
Database qpstudy-okuno
Database qpstudy-okunoDatabase qpstudy-okuno
Database qpstudy-okuno
 

Último

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Último (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

MySQL 5.6新機能解説@dbtechshowcase2012

  • 1. MySQL 5.6 新機能解説 @ db tech showcase 2012 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com
  • 2. 免責事項 ● 本プレゼンテーションにおいて示されている見解は、私自身 の見解であって、オラクル・コーポレーションの見解を必ず しも反映したものではありません。ご了承ください。
  • 3. 自己紹介 ● MySQL サポートエンジニア – 2000 年にサン・マイクロシステムズ入社 ● 主にハードウェアのサポートを担当 – 2007 年に MySQL KK へ転職 ● 気付くとまたサン・マイクロシステムズに・・・ – 現在は日本オラクルに在席。 – サポート一筋 12 年 ● 日々のしごと – MySQL トラブルシューティング全般 – Q&A 回答 など ● ブログ – 漢のコンピュータ道 – http://nippondanji.blogspot.com/
  • 5. MySQL 5.6 リリース候補版登場! ● MySQL Connect 2012 において MySQL 5.6 リリース候 補版( RC = Release Candidate )が発表された。 – MySQL Connect は Oracle OpenWorld と並んで US で 開催されたイベント ● リリース候補版≒ Feature Fix!! – 約 200 の Worklog に対応 – 機能は開発版( DRM = Development Milestone Release )で徐々に追加するという開発モデル ● MySQL 5.5GA (2010年 12 月)以来のメジャーアップ デート – マイナーバージョンではありません。 – 正式版( GA = General Availability )までしばらくお待ち を!!
  • 6. レプリケーション ● GTID – Global Transaction ID – スレーブの自動的な昇格が可能に!! ● クラッシュセーフなスレーブ ● 遅延レプリケーション ● mysqlbinlog コマンドによるバイナリログのバックアップ ● スレーブが使用する NIC の指定 ● マルチスレッドスレーブ – スレーブ SQL スレッドが複数のスレッドで実行可能に!! – DB 単位での並列処理
  • 7. InnoDB ● インデックスの追加と削除がオンラインで可能に!! ● FULLTEXT インデックスのサポート ● .ibd ファイル(テーブル単位のデータファイル)のエクス ポートとインポート – ファイルのコピー+ α の操作他のサーバーへ移行可能!! ● ページサイズの指定( 16KB→4KB/8KB/16KB ) ● インデックス統計情報の改善 ● START TRANSACTION READ ONLY ● ログサイズの上限が増加( 4GB→512GB ) ● デッドロック検出機能の改善 ● CPU スケーラビリティの向上 ● バッファプールの内容を保存、再起動時に暖機運転 ● memcached インターフェイス
  • 8. オプティマイザ ● サブクエリの高速化 – semi-join 最適化 – FROM 句のサブクエリの評価遅延 ● EXPLAIN の改善 – SELECT 以外の DML へ対応 ● 各種アルゴリズムの改善 – ORDER BY ... LIMIT の効率化 – Batched Key Access Join – Index Condition Pushdown – Multi Range Read ● オプティマイザトレース
  • 9. パーティショニング ● パーティションをテーブル同士で交換可能に ● パーティション数の上限増加( 1024→8192 ) ● 明示的なパーティションの指定 ● テーブルロックの改善 – テーブルロックの対象がテーブル全体からパーティション 単位に
  • 10. その他 ● セキュリティ関係 ● ジャイアントロックの解消 ● ホストキャッシュの参照 ● OpenGIS 対応 ● 小数点以下の秒への対応 ● ストアドルーチンにおけるエラーハンドリングの改善 – Diagnostic Area 参考:開発スピードアクセル全開ぶっちぎり!日本よ、これが MySQL 5.6 だッ!! http://nippondanji.blogspot.com/2012/10/mysql-56.html
  • 14. MySQL のレプリケーション アプリケーション 1. COMMIT 4-1. send_ok 接続 スレーブ接続 I/O SQL スレッド 2. スレッド スレッド スレッド バ イ 更 ナリ 5. リレーログ更新 3. テーブル 新 ロ 4-2. バイナリログ 更新 グ 送信 6. 更新の適用 ストレージ バイナリログ リレーログ ストレージ エンジン エンジン マスター スレーブ
  • 15. MySQL のレプリケーション(つづき) マスター / スレーブ マルチマスター Master Slave Master Master + Slave + Slave カスケード Master Slave Slave 循環型 1:N Master Slave + Slave Master Master + Slave Slave Slave Master + Slave
  • 16. MySQL 5.5 のおさらい 準同期レプリケーション COMMIT 完了時にはスレーブへ更新が到達している ることが保証されている。 アプリケーション → HA (高可用性)として利用可能か!? 1. COMMIT 7. send_ok 6-1-2. ack 6-1-1. ack 接続 スレーブ接続 I/O SQL スレッド 2. スレッド スレッド スレッド バ イ 更 ナリ 5. リレーログ更新 3. テーブル 新 ロ 4. バイナリログ 更新 グ 送信 6-2. 更新の適用 ストレージ バイナリログ リレーログ ストレージ エンジン エンジン マスター スレーブ
  • 17. 準同期レプリケーションによる HA ● できるようになったこと ● できなかったこと – マスタークラッシュ時に – スレーブの昇格 スレーブにデータが残 ● 1:N 構成 る – スレーブのクラッシュへ – 1:1 構成 の対応 ● クラッシュ時は再 セットアップ
  • 18. Global Transaction ID ● トランザクションを一意に識別することができる ID – UUID: トランザクション ID の形式で表現される – 例) 095E0FF8-18AF-11E2-9E7C-5C260A2AA986:123456 ● トランザクション ID はシーケンス – 1:N 環境で、どのスレーブが最も進んでいるか一目瞭然! ● MASTER_AUTO_POSITION = 1
  • 19. Global Transaction ID (つづき) mysql> show binlog events in 'mysql-bin.000002'G 〜 省略 〜 *************************** 3. row *************************** Log_name: mysql-bin.000002 Pos: 151 Event_type: Gtid Server_id: 1 End_log_pos: 199 Info: SET @@SESSION.GTID_NEXT= '095E0FF8-18AF-11E2-9E7C- 5C260A2AA986:1' 〜 省略 〜
  • 20. Global Transaction ID (つづき) mysql> SHOW SLAVE STATUSG *************************** 1. row *************************** 〜略〜 Master_UUID: 095e0ff8-18af-11e2-9e7c-5c260a2aa986 Master_Info_File: /path/to/datadir/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: 095E0FF8-18AF-11E2-9E7C-5C260A2AA986:1 Executed_Gtid_Set: 095E0FF8-18AF-11E2-9E7C-5C260A2AA986:1 1 row in set (0.00 sec)
  • 21. マスター昇格時の操作 - ビフォー SHOW BINLOG EVENTS 等でそれぞれのサーバーのバイナリログの内容を比較するなど によって昇格するサーバーの対応するバイナリログポジションを調べて・・・ mysql> change master to master_host='127.0.0.1', -> master_port=13032, -> master_user = 'rsandbox', -> master_password = 'rsandbox', -> master_log_file = 'mysql-bin.123456' , -> master_log_pos = 123456 ; Query OK, 0 rows affected (0.00 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec)
  • 22. マスター昇格時の操作 - アフター mysql> change master to master_host='127.0.0.1', -> master_port=13032, -> master_auto_position = 1 ; Query OK, 0 rows affected (0.03 sec) mysql> start slave user='rsandbox' password='rsandbox'; Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 23. mysqlfailover ● マスターの自動的なフェイルオーバーを実行するツール ● MySQL Workbench に付属 – MySQL Utilities の一部 ● 他にも便利なツールが!! – Python 製
  • 24. mysqlfailover サンプル shell> mysqlfailover --master=root:msandbox@127.0.0.1:13032 --slaves=root:msandbox@127.0.0.1:13033,root:msandbox@127.0.0.1:13034 MySQL Replication Failover Utility Failover Mode = auto Next Interval = Thu Oct 18 22:42:14 2012 Master Information ------------------ Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB mysql-bin.000006 191 Replication Health Status +------------+--------+---------+--------+------------+---------+ | host | port | role | state | gtid_mode | health | +------------+--------+---------+--------+------------+---------+ | 127.0.0.1 | 13032 | MASTER | UP | ON | OK | | 127.0.0.1 | 13033 | SLAVE | UP | ON | OK | | 127.0.0.1 | 13034 | SLAVE | UP | ON | OK | +------------+--------+---------+--------+------------+---------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
  • 25. mysqlfailover フェイルオーバー MySQL Replication Failover Utility Failover Mode = auto Next Interval = Thu Oct 18 22:43:31 2012 Master Information ------------------ Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB mysql-bin.000003 621 Replication Health Status +------------+--------+---------+--------+------------+---------+ | host | port | role | state | gtid_mode | health | +------------+--------+---------+--------+------------+---------+ | 127.0.0.1 | 13033 | MASTER | UP | ON | OK | | 127.0.0.1 | 13034 | SLAVE | UP | ON | OK | +------------+--------+---------+--------+------------+---------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
  • 26. クラッシュセーフなスレーブ ● 以前のバージョン ● MySQL 5.6 InnoDB クラッシュセーフ InnoDB レプリケーション情報 = レプリケーション情報 mysql.slave_relay_log_info = テーブル relay_log_info ファイル InnoDB の更新とは非同期
  • 27. フェイルオーバーのための スレーブ用オプション server_id=1 log_bin=mysql-bin gtid_mode=on log_slave_updates disable_gtid_unsafe_statements master_info_repository=TABLE relay_log_info_repository=TABLE report_host=hostname report_port=3306
  • 29. オンライン DDL ● MySQL 5.1 ビルトインまで – 新しい定義のテーブルを作成してすべてのデータをコピー – ALTER TABLE 中はテーブルの参照のみ可能 – 更新は ALTER が終わるまでブロックされる ● MySQL 5.1 InnoDB Plugin 〜 5.5 – セカンダリインデックス追加時はデータのコピーをせずイン デックスだけを構築 – インデックス構築中は参照のみ可能 ● MySQL 5.6 – インデックス構築中の更新が可能に! New – 特殊なオプション等は特に必要なし
  • 30. テーブルスペースの エクスポート / インポート ● テーブルを .ibd ファイルのコピーで他のマシンへ移行可能 – innodb_file_per_table – MySQL 5.5 まではよくある間違いで、その操作はできな かった。 ● MySQL 5.6 で実施可能に! – FLUSH TABLES t FOR EXPORT
  • 31. テーブルスペースの エクスポート / インポート手順 ● 移行元 – FLUSH TABLES t FOR EXPORT; – .ibd ファイルと .cfg ファイルをコピー – UNLOCK TABLES; ● 移行先 – テーブルの入れ物を作っておく ● CREATE TABLE t (…) ENGINE INNODB; ● ALTER TABLE t DISCARD TABLESPACE; – .ibd ファイルと .cfg ファイルをデータベースディレクトリ内 にコピー – ALTER TABLE t IMPORT TABLESPACE;
  • 32. デッドロック検出機能 ● 検出ロジックが高速に ● エラーログに情報を出力 – innodb_print_all_deadlocks
  • 33. デッドロックのログサンプル InnoDB: transactions deadlock detected, dumping detailed information. 121018 2:28:28 *** (1) TRANSACTION: TRANSACTION 6426, ACTIVE 16 sec starting index read mysql tables in use 1, locked 1 LOCK WAIT 3 lock struct(s), heap size 376, 2 row lock(s), undo log entries 1 MySQL thread id 1, OS thread handle 0x7f126453c700, query id 53 localhost msandbox updating update t set b='sss' where a=1 *** (1) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 6 page no 3 n bits 72 index `PRIMARY` of table `test`.`t` trx id 6426 lock_mode X locks rec but not gap waiting Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 0 0: len 4; hex 00000001; asc ;; 1: len 6; hex 000000001917; asc ;; 2: len 7; hex 13000001890110; asc ;; 3: len 3; hex 747474; asc ttt;; *** (2) TRANSACTION: TRANSACTION 6423, ACTIVE 65 sec starting index read 〜略〜 *** WE ROLL BACK TRANSACTION (2)
  • 34. CPU スケーラビリティの向上 ● MySQL Connect のキーノートスピーチで言及された数値 – R/W sysbench … MySQL 5.5 比で 151% 改善! – Read Only sysbench … MySQL 5.5 比で 234% 改善! – http://medianetwork.oracle.com/video/player/1873154739001 ● kernel_mutex における処理の分散 ● リードオンリートランザクション – 更新の準備が不要なためオーバーヘッドが小さい ● START TRANACTION READ ONLY ● autocommit=1 における SELECT
  • 35. フラッシュのアルゴリズム改善 ● Adaptive Flushing の細かなチューニング – リソースが不足しそうになるとよりアグレッシブなフラッシュ を開始する low water mark を指定可能に ● innodb_adaptive_flushing_lwm ● innodb_max_dirty_pages_pct_lwm – リソースが逼迫した時の I/O の量を指定可能に ● innodb_io_capacity_max – フラッシュ動作変更の間隔を指定可能 ● innodb_flushing_avg_loops ● フラッシュ専用のバックグラウンドスレッド pager_cleaner – 毎秒起動 – innodb_lru_scan_depth でスレッドが検査するサイズを 指定可能 ● ストレージに合わせたフラッシュ動作 – innodb_flush_neighbors
  • 36. memcached プラグイン MySQL MySQL MySQL memcached memcached クライアント クライアント クライアント クライアント クライアント ポート 3306 ポート 11211 接続スレッド 接続スレッド SQL パーサ 接続スレッド memcached オプティマイザ等 プラグイン InnoDB MySQL サーバー
  • 38. 〜 MySQL 5.5 Nested Loop Join SELECT … FROM t1 JOIN t2 ON … WHERE ... for each row in t1 matching where condition { for each row in t2 matching join and where condition { send joined row to client } }
  • 39. 〜 MySQL 5.5 Block Nested Loop Join t1 t2 スキャン 1. WHERE 句の条件に沿って t1 からレコードをフェッチし バッファに格納 2. バッファが満タンに なったら t2 を スキャンして JOIN 3. t1 のすべての レコードについて くりかえし JOIN Buffer Using Join Buffer...
  • 40. MySQL 5.6 における オプティマイザ改善点 ● Disk Sweep Multi Range Read (MRR) ● Batched Key Access Join (BKA) ● Index Condition Pushdown (ICP) ● ORDER BY … LIMIT の効率化 ● サブクエリのアルゴリズム改善 – Semi-Join – FROM 句のサブクエリの改善
  • 41. MRR がない場合 セカンダリインデックス レコード レコードに ランダムアクセス
  • 42. MRR がある場合 セカンダリインデックス レコード MRR レコードの ROWID を バッファに格納し、 ROWID でソート。 ROWID 順でアクセス。
  • 43. Batched Key Access Join t1 t2 1. WHERE 句の条件に沿って t1 からレコードをフェッチし バッファに格納 2. バッファが満タンに なったら MRR で t2 から レコードをフェッチして JOIN MRR Scan 4. t1 のすべての 3. ROWID の順で レコードについて t2 からレコードをフェッチ くりかえし JOIN Buffer
  • 44. Index Condition Pushdown ● 複合インデックスを用いたアクセスの効率化 ● (col1, col2, col3) というインデックスがある場合、これまで は WHERE col1=1 AND col3<10 というような条件では col3 はテーブルからレコードをフェッチする際に評価され なかった。
  • 45. ICP がない場合 セカンダリインデックス レコード col1 col2 col3 col1=1 のすべての レコードをフェッチ。 : col3 の条件は使われない。 0 20 10 1 3 4 1 3 10 1 3 20 1 8 2 1 9 9 1 9 11 1 9 15 1 11 5 1 11 13 2 1 2 :
  • 46. ICP がある場合 セカンダリインデックス レコード col1 col2 col3 col1=1 かつ col3<10 の条件に合うレコード : だけをフェッチ。 0 20 10 1 3 4 1 3 10 1 3 20 フェッチされずに 1 8 2 済んだレコード 1 9 9 1 9 11 1 9 15 1 11 5 1 11 13 2 1 2 :
  • 47. ORDER BY … LIMIT の効率化 ● SELECT column_list FROM single_table ORDER BY non_indexed_colum LIMIT n – というような構造のクエリが速くなる。 – Using sort buffer... ● 従来のアルゴリズム – すべての結果をソートしてから上位の n 個を返す ● MySQL 5.6 のアルゴリズム – ソートバッファに n 個のレコードが確実に格納出来るとわ かっている場合、上位の結果だけをソートバッファに格納 する – ソートバッファに収まらない場合は従来のアルゴリズム
  • 48. Semi Join ● 相関サブクエリの効率を改善 – 従来のアルゴリズム=外部クエリから1行フェッチするごと に、サブクエリを実行 – 相関のないサブクエリは最初に1度だけ実行されるので遅 くはない ● 従来は開発者が JOIN に書き換える必要があった。 – 多くの場合は SELECT DISTINCT で対応可能 ● Semi Join とは、重複を含まないサブクエリのこと。外部ク エリ1行に対して最大で1行だけマッチする Join のこと。 – SQL には Semi Join に該当する Join はない。
  • 49. MySQL 5.5 の例 - EXPLAIN EXPLAIN SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT City.CountryCode FROM City WHERE Name LIKE 'A%')G *************************** 1. row *************************** id: 1 select_type: PRIMARY table: Country type: index possible_keys: NULL key: PRIMARY key_len: 3 ref: NULL rows: 247 Extra: Using where; Using index *************************** 2. row *************************** id: 2 select_type: DEPENDENT SUBQUERY table: City type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4037 Extra: Using where 2 rows in set (0.00 sec)
  • 50. MySQL 5.5 の例 - SELECT mysql> SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT City.CountryCode FROM City WHERE Name LIKE 'A%')G *************************** 1. row *************************** COUNT(1): 71 1 row in set (0.26 sec) mysql> SHOW STATUS LIKE 'handler_read%'; +-----------------------+--------+ | Variable_name | Value | +-----------------------+--------+ | Handler_read_first | 240 | | Handler_read_key | 240 | | Handler_read_last | 0 | | Handler_read_next | 239 | | Handler_read_prev | 0 | | Handler_read_rnd | 0 | | Handler_read_rnd_next | 824291 | +-----------------------+--------+ 7 rows in set (0.00 sec)
  • 51. MySQL 5.6 の例 - EXPLAIN EXPLAIN SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT City.CountryCode FROM City WHERE Name LIKE 'A%')G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: Country type: index possible_keys: PRIMARY key: PRIMARY key_len: 3 ref: NULL rows: 239 Extra: Using where; Using index *************************** 2. row *************************** id: 1 select_type: SIMPLE table: <subquery2> type: eq_ref possible_keys: <auto_key> key: <auto_key> key_len: 3 ref: world.Country.Code rows: 1 Extra: NULL ・・・つづく
  • 52. MySQL 5.6 の例 - EXPLAIN つづき *************************** 3. row *************************** id: 2 select_type: MATERIALIZED table: City type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4188 Extra: Using where 3 rows in set (0.00 sec)
  • 53. MySQL 5.6 の例 - SELECT mysql> SELECT COUNT(1) FROM Country WHERE Country.Code IN (SELECT City.CountryCode FROM City WHERE Name LIKE 'A%')G *************************** 1. row *************************** COUNT(1): 71 1 row in set (0.00 sec) mysql> SHOW STATUS LIKE 'handler_read%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Handler_read_first | 2 | | Handler_read_key | 241 | | Handler_read_last | 0 | | Handler_read_next | 239 | | Handler_read_prev | 0 | | Handler_read_rnd | 0 | | Handler_read_rnd_next | 4080 | +-----------------------+-------+ 7 rows in set (0.00 sec)
  • 54. FROM 句のサブクエリ ● 評価の遅延 – マテリアライゼーションが実際にレコードが必要な場合だけ 行われるように。 – EXPLAIN が高速化。 – WHERE 句の条件次第ではマテリアライゼーションが不要 に。 ● マテリアライゼーションによって作成されたテンポラリテー ブルにインデックスを作成。
  • 55. MySQL 5.5 の例 mysql> SELECT COUNT(1) FROM Country C1 JOIN (SELECT * FROM City) AS C2 ON (C1.Capital = C2.ID) WHERE C1.Name LIKE 'X%'; +----------+ | COUNT(1) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> SHOW STATUS LIKE 'handler_read%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Handler_read_first | 2 | | Handler_read_key | 2 | | Handler_read_last | 0 | | Handler_read_next | 0 | | Handler_read_prev | 0 | | Handler_read_rnd | 0 | | Handler_read_rnd_next | 4320 | +-----------------------+-------+ 7 rows in set (0.00 sec)
  • 56. MySQL 5.6 の例 mysql> SELECT COUNT(1) FROM Country C1 JOIN (SELECT * FROM City) AS C2 ON (C1.Capital = C2.ID) WHERE C1.Name LIKE 'X%'; +----------+ | COUNT(1) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> SHOW STATUS LIKE 'handler_read%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Handler_read_first | 1 | | Handler_read_key | 1 | | Handler_read_last | 0 | | Handler_read_next | 0 | | Handler_read_prev | 0 | | Handler_read_rnd | 0 | | Handler_read_rnd_next | 240 | +-----------------------+-------+ 7 rows in set (0.00 sec)
  • 57. まとめ ● MySQL 5.6 には大幅な新機能が追加された。 – 本日紹介したもの ● レプリケーション ● InnoDB ● オプティマイザ ● MySQL は急速に進化中!! ● GA (正式版)リリースをお楽しみに。