Mysql casual fukuoa_vlo_2

14,436 views

Published on

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,436
On SlideShare
0
From Embeds
0
Number of Embeds
11,030
Actions
Shares
0
Downloads
23
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Mysql casual fukuoa_vlo_2

    1. 1. AWSでMySQLのベンチを取ってみた @Spring_MT http://www.imgstyle.info/detail.php?id=1762
    2. 2. Agenda AWSについて セットアップ Sequenceテーブルについて ベンチマーク
    3. 3. AWSについて
    4. 4. なぜAWS ?スケールアップスケールアウト
    5. 5. スケールアップスケールアップが簡単(インスタンスを止める必要がありますが。。。。) GUIから操作可能
    6. 6. スケールアウトインスタンスを作るのが簡単(3分クッキング)自前AMIを作っておけばもっと簡単
    7. 7. 悩みどころVPC(Virtual Private Cloud)の使いどころ LBはPublicに Webサーバー、DBサーバーはPrivateにしたい
    8. 8. こんな感じにしたい
    9. 9. GlobalPrivate Web Web Web DB DB DB
    10. 10. こちらも参照ください http://d.hatena.ne.jp/lamanotrama/20120421/1334994072
    11. 11. AWSでMySQL MySQLは二通りで使える EC2内でMySQLをインストール RDS今回は5.6を使う都合上、EC2を使っています
    12. 12. セットアップ http://lovefreephoto.blog110.fc2.com/blog-entry-176.html
    13. 13. EC2のセットアップ
    14. 14. EC2には月曜日に初めて触りました。。。。
    15. 15. なので、、、、
    16. 16. EC2のセットアップhttps://s3.amazonaws.com/horiyasu/prasentations/20120908_myojowaraku_handon.pdf
    17. 17. こちらをご参照ください orz
    18. 18. 今回使用したEC2のスペック EC2 Small CPU Cores 1 Core CPU Units 1 ECU Memory 1.7 GB
    19. 19. 補足EC2 コンピュートユニット(ECU) 1つの EC2 コンピュートユニットは、1つの1.0-1.2 GHz 2007 Opteron または 2007 Xeon プロセッサの CPU 能力に等しい能力 つまり、CPUが2coresで 5ECUsだと1coreあたり 2.5ECUの能力がある
    20. 20. MySQLのインストール
    21. 21. MySQL 5.5EC2のyumでインストール yum install mysql mysql-server mysql-devel
    22. 22. # mysql -Vmysql Ver 14.14 Distrib 5.5.24, for Linux (x86_64) using readline 5.1# mysql -u root -phogehogeWelcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 65Server version: 5.5.24-log MySQL Community Server (GPL)Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or h for help. Type c to clear the current input statement.mysql>
    23. 23. MySQL 5.6.7 rcMySQLのdownloadsからrpmを取得しインストール Linux - Generic 2.6 (x86, 64-bit), RPM Package MySQL-server-5.6.7_rc-1.linux2.6.x86_64.rpm MySQL-client-5.6.7_rc-1.linux2.6.x86_64.rpm MySQL-devel-5.6.7_rc-1.linux2.6.x86_64.rpm MySQL-shared-5.6.7_rc-1.linux2.6.x86_64.rpm
    24. 24. # mysql -Vmysql Ver 14.14 Distrib 5.6.7-rc, for Linux (x86_64) using EditLine wrapper# mysql -u root -phogehogeWarning: Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 63Server version: 5.6.7-rc-log MySQL Community Server (GPL)Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type help; or h for help. Type c to clear the current input statement.mysql>
    25. 25. MySQLセットアップ
    26. 26. 初心者は黙ってmysql_secure_installation
    27. 27. Sequenceテーブルについて http://www.s-graphics.co.jp/nanoelectronics/freestuffs/large/dna1.jpg
    28. 28. Sequenceテーブルとは単純にIDを発行するだけのテーブル前回のMySQL Casual Talks in Fukuokaで少し紹介
    29. 29. AUTO_INCREMENT基本的にshardすることを考えているので、AUTO_INCREMENTは使わない AUTO_INCREMENTした場合は、IDの発行にずれが でる
    30. 30. Shardなしの場合 Shardありの場合 User User User User shard1 shard2 shard3 user_id : 1 user_id : 1 user_id : 1 user_id : 1 user_id : 2 user_id : 2 user_id : 2 user_id : 2 user_id : 3 user_id : 3 user_id : 3 user_id : 3 user_id : 4 user_id : 4 user_id : 4 user_id : 4 user_id : 5 user_id : 5 user_id : 5 user_id : 5 ・ ・ ・ ・ ・ ・ ・ ・ id発行に重複がでてしまう!
    31. 31. sequenceテーブル CREATE TABLE `sequence` ( `id` bigint(20) unsigned NOT NULL ) ENGINE=MyISAM; ①ID発行 Sequence UPDATE sequence SET id=LAST_INSERT_ID(id+1);App User②発行されたIDを使ってINSERT shard1 User SELECT LAST_INSERT_ID(); shard2 User shard3
    32. 32. 今回のアプリでは。。。IDが必要なデータは全てユニークなIDを持つ IDがわかれば、それに紐付くデータが一意に決まる 重複が起きにくい user_id + なにかコンテンツのID
    33. 33. アプリ全体でユニークなIDIDを発行するSequenceテーブルの フォーマンスが重要 !! Sequence テーブルがSPOFでもある。。。
    34. 34. ベンチマーク http://www.imgstyle.info/detail.php?id=1762
    35. 35. ベンチマークの条件sequence tableにupdateを打つ
    36. 36. テーブルCREATE DATABASE sequence CHARACTER SET utf8mb4COLLATE utf8mb4_general_ci;CREATE TABLE `seq_myisam` ( `id` bigint(20) unsigned NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;INSERT INTO seq_myisam values (1000000);CREATE TABLE `seq_innodb` ( `id` bigint(20) unsigned NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO seq_innodb values (1000000);
    37. 37. my.cnf[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockserver-id = 1user = mysqlport = 3306log-bin = mysql-binlog-bin-index = mysql-binrelay-log = relay-binrelay-log-index = relay-bininnodb_buffer_pool_size=500Minnodb_flush_method=O_DIRECTsync_binlog = ?innodb_flush_log_at_trx_commit= ?
    38. 38. autocommitInnoDBの場合、オートコミットはオンにしています MySQL 5.5.8以降であれば、my.cnfにautocommitの デフォルト設定を書けます [mysqld] autocommit=0
    39. 39. スクリプトベンチマークスクリプト概要同時接続 : 20回数 : 500回 → 計 10,000回 updateを打つ これを3回繰り返し、その平均を取っています https://gist.github.com/3904394
    40. 40. 比較sync_binlog on or offinnodb_flush_log_at_trx_commit 0 or 1 or 2
    41. 41. sync_binlogバイナリログをファイルシステムのキャッシュから物理ディスクへフラッシュさせるタイミングを制御する設定 sync_binlog = 1だと一回バイナリログへ更新を行う 度にディスクへのフラッシュを行う。安全な設定な 反面ファイルI/Oの負荷が上がり遅くなる。 sync_binlog = 0だと、ディスクへのフラッシュする タイミングはOS依存?
    42. 42. innodb_flush_log_at_trx_commit トランザクションのCOMMIT時に、InnoDBログファ イルへデータが同期されるかの設定 0 : 一秒毎に 書き込み、フラッシュ 1 : COMMIT毎に書き込み、フラッシュ 2 : COMMITと同時に書き込まれますが、一秒毎に フラッシュさせる
    43. 43. ログの同期sync_binlog = 1 innodb_flush_log_at_trx_commit =1(innodb_support_xa=1)の時、バイナリログとInnoDBログが完全に同期されるレプリケーションをしている場合、slaveはsync_binlogと innodb_flush_log_at_trx_commitは甘い設定でもOK(作り直せばいいから)
    44. 44. InnoDBの場合マスタはInnoDBのクラッシュリカバリによって復旧するので、innodb_flush_log_at_trx_commit=1さえ設定してあれば大丈夫バイナリログが欠損した場合も考えて、sync_binlog=1は設定しておく? MySQLのDRBD構成におけるネットワーク遅延の影響について : http://d.hatena.ne.jp/sh2/20120625
    45. 45. ベンチマーク結果
    46. 46. ベンチマーク考察MySQL 5.6では、sync_binlogの性能が上がってる MySQL 5.6におけるsync_binlog=1の改善について&勉強会のお知らせ : http://d.hatena.ne.jp/ sh2/20120717innodb_flush_log_at_trx_commit = 1の性能も向上してる
    47. 47. まとめSequenceテーブルだとレプリケーション要らないので、MySQL 5.6を使って、sync_binlog=0innodb_flush_log_at_trx_commit = 1に設定しておけば、InnoDBでMyISAMと同等の更新性能を発揮でき、かつMyISAMを使っていたときよりクラッシュセーフになる(InnoDBログからのクラッシュリカバリができるので)
    48. 48. ご清聴有難うございました
    49. 49. 参照URL2.4. RPM パッケージから Linux に MySQL をインストールする : http://dev.mysql.com/doc/refman/5.1-olh/ja/linux-rpm.html4.11.4. バイナリ ログ : http://dev.mysql.com/doc/refman/5.1/ja/binary-log.htmlオートコミットをデフォルトオフにする(MySQL 5.5の場合) : http://blog.kimuradb.com/?eid=877247MySQLのDRBD構成におけるネットワーク遅延の影響について : http://d.hatena.ne.jp/sh2/20120625MySQL 5.6におけるsync_binlog=1の改善について&勉強会のお知らせ : http://d.hatena.ne.jp/sh2/20120717InnoDBのリカバリ機能を検証してみる : http://nkjmkzk.net/?p=60クラッシュリカバリとInnoDBログ : http://open-groove.net/mysql/crash-recovery-innodb-log/InnoDBログファイル : http://www.mysqlpracticewiki.com/index.php/InnoDB%E3%83%AD%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB

    ×