mysqlを使って困ることあれこれ - ne...mysqlチューニングで実際にあった話...
TRANSCRIPT
![Page 1: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/1.jpg)
MySQLを使って困ることあれこれ若しくは「OSSデータベースの技術手法に関して」
株式会社ビーグッド・テクノロジー
![Page 2: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/2.jpg)
2
自己紹介
名前:矢野
ID:ツイッターとかやってません。
年:8801mkII(8bit!)とかNEW7とかの世代
趣味:PC組み立て
所属:株式会社ビーグッド・テクノロジー
好きな言語:Ruby(でも、あんまり使えない)
部署リーダーしてます。ネットワーク屋です。DBパフォーマンスチューニングしてます。
![Page 3: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/3.jpg)
3
今回のお話
MySQL、MySQL、MySQL
矢野がMySQLを使ってきた中で困ったor チューニングサービスをしたときに遭遇した[なんやこれ]なお話し。
![Page 4: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/4.jpg)
4
提供
G-Consortium
株式会社ビーグッド・テクノロジー
![Page 5: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/5.jpg)
5
今回はMySQLのお話し
MySQLってオープンソースだよね。
オープンソースで普通に使えるの?
だれかにお金を払わないといけないの?
後から請求されるとかないよね?
![Page 6: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/6.jpg)
6
オープンソース(GPL)って何?
自由な再頒布ができること ソースコードを入手できること 派生物が存在でき、派生物に同じライセンスを適用できること
差分情報の配布を認める場合には、同一性の保持を要求してもかまわない
個人やグループを差別しないこと 適用領域に基づいた差別をしないこと 再配布において追加ライセンスを必要としないこと 特定製品に依存しないこと 同じ媒体で配布される他のソフトウェアを制限しないこと
技術的な中立を保っていること
![Page 7: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/7.jpg)
7
要するに
単に使う分には、ソースコードが公開されていて、自由に配布できて変更できて制限なし。
ソースに手を入れると一部、全部にかかわらず公開する必要が発生します。MySQLだと商用組み込みライセンスを購入した場合はその必要はありません。(GPL、商用のデュアルライセンスなので)
![Page 8: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/8.jpg)
8
MySQL Community版は?
GPLv2です。
ソースコード改変なしに利用する場合には何も必要ありません。
サポートは??
ありません。がOracleのサポートに入ることができます。(MySQL Standard、Enterprise)他にもMySQLサポートを提供している会社は、数社あります。
私は、書籍とGoogle先生、MySQLエキスパートな人のブログを読んで勉強しました。Oracleで勉強するときも同じようにするでしょう。
![Page 9: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/9.jpg)
ここから本題です。
9
MySQLを使ったときにはまるところ
![Page 10: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/10.jpg)
10
1スレッド1CPUの問題
1つのコネクション(TCP接続)で利用できるCPUの数は1つ
MySQLチューニングで実際にあった話
MySQLが早いというのでOracleをやめて導入してみた。Oracleのバッチの頃、処理が重かったので4コアCPUを2つ積んでみた(CPUが8個HTで16個)けど、やっぱりなんか遅い。なんで?
![Page 11: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/11.jpg)
11
1スレッド1CPUの問題
お客さんがどんな処理をしていたか。
アプリがバッチのように1つのコネクションでSQLを実行して複雑な問い合わせを1回の接続で取得しようとしていた。
測定結果:MySQLはコネクション単位でしかCPUを利用できないので1CPUが頑張っていた。マルチコアCPUなので周波数が低く1CPU辺りのパフォーマンスも落ちていた。
![Page 12: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/12.jpg)
12
MySQLで巨大なSQL処理を走らせた
MySQLは、巨大なSQL処理(DBトランザクション)を一発実行するにはあまり向いていません。
1スレッド1CPUの問題
SQLクエリオプティマイザーの問題
どちらかというと軽いSQLを多く実行するという処理に向いているDBです。複雑なクエリーを1つ投げるより、簡単なクエリーを沢山投げてAP側で対応した方がいいです。
そういう理由でソーシャル系のサービスでの利用が盛んです。
![Page 13: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/13.jpg)
13
MySQLの特性
小さなトランザクションを沢山こなすのに向いている。逆をいうと大きなトランザクションを1発というのには向いていない。そういう集計バッチ系の処理には、後続セッションの
の方が向いていると思われます。適材適所でご利用ください。
![Page 14: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/14.jpg)
14
Oracleユーザーがよく体験すること
Aさん、「MySQLに接続して別のセッションでアップデートしたのがselectしても見えないな~。」(トランザクション分離レベル)リピータブルリードなのでAさんがselectした時点でデータが保持されます。
対策:commit;<enter>でタイムポイントを進める必要があります。その後再度selectするとアップデートしたものを見ることが出来ます。
オートコミットがデフォルトです。必要な場合には、start transactionしてください。
![Page 15: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/15.jpg)
15
トランザクション分離レベル
リピータブルリードとか、リードコミッテッドとか面倒な用語はいろいろあるのですが、要は
1.TCP接続した後に他のTCP接続のコミットが見られるのがリードコミッテッド(Oracle)。
2.TCP接続した後に他のTCP接続のコミットが見られないのがリピータブルリード(MySQL)。
![Page 16: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/16.jpg)
16
SQLクエリーオプティマイザー
SQLクエリーオプティマイザーがOracleほど頭が良くありません。(ある程度の最適化は出来ますが、複雑なものになると.....。)例えば難しいクエリーで、joinしてorderしてgroupしてuniq…とかするとtmpテーブルを作り始めます。oracleでもtmpテーブルを作ると思いますが、諦めが早い気がします。
このtmpテーブルが大きな問題を引き起こすことが多いです。
![Page 17: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/17.jpg)
17
tmpテーブルとは?
MySQLで複雑なjoinやgroupで、一時的に用意されるテーブル。メモリー上にMEMORYストレージエンジンで用意される。この利用されるメモリーサイズがtmp_table_sizeを越える場合には、MyISAMストレージエンジンに変換されてDiskに保存される。「Diskに保存される」ここが問題!
超遅いです。チューニングでもこれを真っ先に見るぐらい
![Page 18: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/18.jpg)
18
tmpテーブル
対策は?ありません。強いていえばtmpテーブルを作るような複雑なクエリーを避け
るとか。
Diskに保存する頻度を下げる方法として、tmp_table_sizeを大きくする=メモリーで展開出来る量が増えます。(サーバメモリー量に依存します。)
それでもCreated_tmp_disk_tablesが増える
場合OS上にRAM Diskを確保して、my.cnfに「tmpdir」をRAM Diskに指定する。
![Page 19: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/19.jpg)
19
tmpdirをRAM Disk上に!
OS上にRAM Diskを確保して、my.cnfに「tmpdir」をRAM Diskに指定する。
結局メモリー頼みです。そんな時にマシンが落っこちたら....。アウトです。
![Page 20: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/20.jpg)
20
MySQLはハードウェアの性能に大きく依存する、と思う
Oracleは貧弱なハードウェアでもある程度スピードが出るように作られている(ような気がします)
MySQLは、ハードウェア(特にDiskI/O回り)に大きく依存する作りな気がします。#Linuxにも言えることですが。
なので、最近MySQLにお勧めなのが
SSDです。ソーシャルゲーム系でも今は、SSD無しでは成り立たないそう。
![Page 21: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/21.jpg)
21
MySQLでSSDを利用したテスト
上記の/etc/my.cnfは、デフォルト(ダメダメな設定)です。もう、MySQLチューニングなんて要らないんじゃないかと思うぐらいです。(T_T)単位:Transaction/sec
![Page 22: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/22.jpg)
22
Oracleから来た人にはInnoDBがお勧め
なぜなら、行ロックがあるから。MyISAMは、テーブルロックです。
でも、InnoDBだってテーブルロックする場合があります。例)ユニーク制約 or インデックスが貼られていないカラムで検索する場合
クラスターインデックスとかを有効に使うとスピードアップしますよ。参考:MySQL INDEX+EXPLAIN入門http://www.slideshare.net/infinite_loop/mysql-indexexplain
![Page 23: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/23.jpg)
23
MySQLでチューニング
explainしましょう。(アテにならなことも....。実データでやった方が安心です。analyzeも)
Hint文使えます。
my.cnfをデフォルトで使わない。
1台で何でもやろうと思わないこと。
![Page 24: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/24.jpg)
24
Innotop(要インストール)
show (global) variables;
show profiles;
show (global|session) status;
show engine (innodb) status;
show (full) processlist;
slow_query_log
MySQLでチューニングするときのコマンド
![Page 25: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/25.jpg)
25
以下の様なサービスを提供しています。
BGTマネージドクラウド
障害監視サービス
サーバー運用サービス
Webサイト負荷テストサービス
サイトチューニングサービス
MySQL DBマネージドサービス
ビーグッド・テクノロジーのサービス
![Page 26: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/26.jpg)
BGTマネージドクラウド PaaS for GeneXus
26
開発ベンダー様にてニーズがあればご提供を検討
GeneXusでの開発メリットを最大限に引き出すためのGeneXus実行環境クラウドサービス
for
![Page 27: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/27.jpg)
テスト環境、本番環境の提供
27
GeneXus実行環境
テンプレート
③サービス利用開始
①テンプレート選択
開発担当
②コードデプロイ
GeneXus開発環境
利用者
DBサーバ
WindowsサーバLinuxサーバ
GeneXusの実行環境を簡単に立ち上げてお客様に提供する事が可能です。
for
![Page 28: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/28.jpg)
サービス提供開始までの期間を大幅短縮
28
開発
これまでのサービス構築
サーバー構築
開発
GeneXus+PaaSでのサービス構築
サーバー
構築
GeneXusで工期短縮
PaaSで工期短縮
テスト環境
構築お客様テスト
サーバー調達不要
ネットワーク構築不要
サーバー設置不要
![Page 29: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/29.jpg)
各種GeneXus向けテンプレート
GeneXus向けテンプレートとして以下のものを用意
29
初期費用を抑えたいMySQLテンプレート
OSがLinuxでApacheとMySQLを利用したテンプレート
パフォーマンスを重視するJavaテンプレート
OSがLinuxで、ApacheTomcatとMySQLを利用したテンプレート
カスタマイズ
その他、GeneXusで利用できる実行環境を組み合わせてご提供
管理を簡単にSQL Serverテンプレート
OSがWindowsで、IISとSQL Serverを利用したテンプレート
WebサーバLinuxApache/mod_rack
DBサーバLinuxMySQL
WebサーバWindowsIIS
DBサーバWindowsSQL Server
WebサーバLinuxApache/Tomcat
DBサーバLinuxMySQL
![Page 30: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/30.jpg)
30
MySQL DBマネージドサービス
キャッチフレーズ『MySQLの面倒なあれやこれ。面倒見ます。』
例)
MySQLを使っていて遅くなった。見て欲しい。
MySQLで冗長化して欲しい。
MySQLでバックアップの面倒を見て欲しい。
定期的なチューニング監視をして欲しい。
弊社提供のクラウドサービスをご利用頂ければ、MySQLのお悩みごとを解決いたします。
![Page 31: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ](https://reader030.vdocuments.mx/reader030/viewer/2022011822/5ec5aa0c8e64fe7e6f3219ee/html5/thumbnails/31.jpg)
31
まとめ
MySQLは、Oracleの感覚で使うと困ることになります。MySQLの作法を覚えましょう。
適材適所で利用しましょう。
チューニングしないと後から困ることになります。
面倒な方は、BGTマネージドクラウドでMySQL DB マネージドサービスを利用すると便利です。