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