Mysql casual fukuoa_vlo_2
Upcoming SlideShare
Loading in...5
×
 

Mysql casual fukuoa_vlo_2

on

  • 11,109 views

 

Statistics

Views

Total Views
11,109
Views on SlideShare
2,716
Embed Views
8,393

Actions

Likes
6
Downloads
17
Comments
0

15 Embeds 8,393

http://spring-mt.tumblr.com 4705
http://mysql-casual.org 3616
http://webcache.googleusercontent.com 28
http://tumblr.hootsuite.com 17
https://twitter.com 9
https://www.google.co.jp 4
http://www.google.com 2
http://yandex.ru 2
http://search.yahoo.com 2
http://kwy8791.tumblr.com 2
https://just-now.net 2
http://mysql-casual.sakura.ne.jp 1
http://translate.googleusercontent.com 1
http://www.google.co.jp 1
http://feedly.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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 Mysql casual fukuoa_vlo_2 Presentation Transcript

  • AWSでMySQLのベンチを取ってみた @Spring_MT http://www.imgstyle.info/detail.php?id=1762
  • Agenda AWSについて セットアップ Sequenceテーブルについて ベンチマーク
  • AWSについて
  • なぜAWS ?スケールアップスケールアウト
  • スケールアップスケールアップが簡単(インスタンスを止める必要がありますが。。。。) GUIから操作可能
  • スケールアウトインスタンスを作るのが簡単(3分クッキング)自前AMIを作っておけばもっと簡単
  • 悩みどころVPC(Virtual Private Cloud)の使いどころ LBはPublicに Webサーバー、DBサーバーはPrivateにしたい
  • こんな感じにしたい
  • GlobalPrivate Web Web Web DB DB DB
  • こちらも参照ください http://d.hatena.ne.jp/lamanotrama/20120421/1334994072
  • AWSでMySQL MySQLは二通りで使える EC2内でMySQLをインストール RDS今回は5.6を使う都合上、EC2を使っています
  • セットアップ http://lovefreephoto.blog110.fc2.com/blog-entry-176.html
  • EC2のセットアップ
  • EC2には月曜日に初めて触りました。。。。
  • なので、、、、
  • EC2のセットアップhttps://s3.amazonaws.com/horiyasu/prasentations/20120908_myojowaraku_handon.pdf
  • こちらをご参照ください orz
  • 今回使用したEC2のスペック EC2 Small CPU Cores 1 Core CPU Units 1 ECU Memory 1.7 GB
  • 補足EC2 コンピュートユニット(ECU) 1つの EC2 コンピュートユニットは、1つの1.0-1.2 GHz 2007 Opteron または 2007 Xeon プロセッサの CPU 能力に等しい能力 つまり、CPUが2coresで 5ECUsだと1coreあたり 2.5ECUの能力がある
  • MySQLのインストール
  • MySQL 5.5EC2のyumでインストール yum install mysql mysql-server mysql-devel
  • # 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>
  • 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
  • # 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>
  • MySQLセットアップ
  • 初心者は黙ってmysql_secure_installation
  • Sequenceテーブルについて http://www.s-graphics.co.jp/nanoelectronics/freestuffs/large/dna1.jpg
  • Sequenceテーブルとは単純にIDを発行するだけのテーブル前回のMySQL Casual Talks in Fukuokaで少し紹介
  • AUTO_INCREMENT基本的にshardすることを考えているので、AUTO_INCREMENTは使わない AUTO_INCREMENTした場合は、IDの発行にずれが でる
  • 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発行に重複がでてしまう!
  • 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
  • 今回のアプリでは。。。IDが必要なデータは全てユニークなIDを持つ IDがわかれば、それに紐付くデータが一意に決まる 重複が起きにくい user_id + なにかコンテンツのID
  • アプリ全体でユニークなIDIDを発行するSequenceテーブルの フォーマンスが重要 !! Sequence テーブルがSPOFでもある。。。
  • ベンチマーク http://www.imgstyle.info/detail.php?id=1762
  • ベンチマークの条件sequence tableにupdateを打つ
  • テーブル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);
  • 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= ?
  • autocommitInnoDBの場合、オートコミットはオンにしています MySQL 5.5.8以降であれば、my.cnfにautocommitの デフォルト設定を書けます [mysqld] autocommit=0
  • スクリプトベンチマークスクリプト概要同時接続 : 20回数 : 500回 → 計 10,000回 updateを打つ これを3回繰り返し、その平均を取っています https://gist.github.com/3904394
  • 比較sync_binlog on or offinnodb_flush_log_at_trx_commit 0 or 1 or 2
  • sync_binlogバイナリログをファイルシステムのキャッシュから物理ディスクへフラッシュさせるタイミングを制御する設定 sync_binlog = 1だと一回バイナリログへ更新を行う 度にディスクへのフラッシュを行う。安全な設定な 反面ファイルI/Oの負荷が上がり遅くなる。 sync_binlog = 0だと、ディスクへのフラッシュする タイミングはOS依存?
  • innodb_flush_log_at_trx_commit トランザクションのCOMMIT時に、InnoDBログファ イルへデータが同期されるかの設定 0 : 一秒毎に 書き込み、フラッシュ 1 : COMMIT毎に書き込み、フラッシュ 2 : COMMITと同時に書き込まれますが、一秒毎に フラッシュさせる
  • ログの同期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(作り直せばいいから)
  • InnoDBの場合マスタはInnoDBのクラッシュリカバリによって復旧するので、innodb_flush_log_at_trx_commit=1さえ設定してあれば大丈夫バイナリログが欠損した場合も考えて、sync_binlog=1は設定しておく? MySQLのDRBD構成におけるネットワーク遅延の影響について : http://d.hatena.ne.jp/sh2/20120625
  • ベンチマーク結果
  • ベンチマーク考察MySQL 5.6では、sync_binlogの性能が上がってる MySQL 5.6におけるsync_binlog=1の改善について&勉強会のお知らせ : http://d.hatena.ne.jp/ sh2/20120717innodb_flush_log_at_trx_commit = 1の性能も向上してる
  • まとめSequenceテーブルだとレプリケーション要らないので、MySQL 5.6を使って、sync_binlog=0innodb_flush_log_at_trx_commit = 1に設定しておけば、InnoDBでMyISAMと同等の更新性能を発揮でき、かつMyISAMを使っていたときよりクラッシュセーフになる(InnoDBログからのクラッシュリカバリができるので)
  • ご清聴有難うございました
  • 参照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