31
MySQLを使って困ることあれこれ 若しくは「OSSデータベースの技術手法に関して」 株式会社ビーグッド・テクノロジー

MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

MySQLを使って困ることあれこれ若しくは「OSSデータベースの技術手法に関して」

株式会社ビーグッド・テクノロジー

Page 2: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

2

自己紹介

名前:矢野

ID:ツイッターとかやってません。

年:8801mkII(8bit!)とかNEW7とかの世代

趣味:PC組み立て

所属:株式会社ビーグッド・テクノロジー

好きな言語:Ruby(でも、あんまり使えない)

部署リーダーしてます。ネットワーク屋です。DBパフォーマンスチューニングしてます。

Page 3: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

3

今回のお話

MySQL、MySQL、MySQL

矢野がMySQLを使ってきた中で困ったor チューニングサービスをしたときに遭遇した[なんやこれ]なお話し。

Page 4: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

4

提供

G-Consortium

株式会社ビーグッド・テクノロジー

Page 5: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

5

今回はMySQLのお話し

MySQLってオープンソースだよね。

オープンソースで普通に使えるの?

だれかにお金を払わないといけないの?

後から請求されるとかないよね?

Page 6: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

6

オープンソース(GPL)って何?

自由な再頒布ができること ソースコードを入手できること 派生物が存在でき、派生物に同じライセンスを適用できること

差分情報の配布を認める場合には、同一性の保持を要求してもかまわない

個人やグループを差別しないこと 適用領域に基づいた差別をしないこと 再配布において追加ライセンスを必要としないこと 特定製品に依存しないこと 同じ媒体で配布される他のソフトウェアを制限しないこと

技術的な中立を保っていること

Page 7: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

7

要するに

単に使う分には、ソースコードが公開されていて、自由に配布できて変更できて制限なし。

ソースに手を入れると一部、全部にかかわらず公開する必要が発生します。MySQLだと商用組み込みライセンスを購入した場合はその必要はありません。(GPL、商用のデュアルライセンスなので)

Page 8: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

8

MySQL Community版は?

GPLv2です。

ソースコード改変なしに利用する場合には何も必要ありません。

サポートは??

ありません。がOracleのサポートに入ることができます。(MySQL Standard、Enterprise)他にもMySQLサポートを提供している会社は、数社あります。

私は、書籍とGoogle先生、MySQLエキスパートな人のブログを読んで勉強しました。Oracleで勉強するときも同じようにするでしょう。

Page 9: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

ここから本題です。

9

MySQLを使ったときにはまるところ

Page 10: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

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コ

11

1スレッド1CPUの問題

お客さんがどんな処理をしていたか。

アプリがバッチのように1つのコネクションでSQLを実行して複雑な問い合わせを1回の接続で取得しようとしていた。

測定結果:MySQLはコネクション単位でしかCPUを利用できないので1CPUが頑張っていた。マルチコアCPUなので周波数が低く1CPU辺りのパフォーマンスも落ちていた。

Page 12: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

12

MySQLで巨大なSQL処理を走らせた

MySQLは、巨大なSQL処理(DBトランザクション)を一発実行するにはあまり向いていません。

1スレッド1CPUの問題

SQLクエリオプティマイザーの問題

どちらかというと軽いSQLを多く実行するという処理に向いているDBです。複雑なクエリーを1つ投げるより、簡単なクエリーを沢山投げてAP側で対応した方がいいです。

そういう理由でソーシャル系のサービスでの利用が盛んです。

Page 13: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

13

MySQLの特性

小さなトランザクションを沢山こなすのに向いている。逆をいうと大きなトランザクションを1発というのには向いていない。そういう集計バッチ系の処理には、後続セッションの

の方が向いていると思われます。適材適所でご利用ください。

Page 14: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

14

Oracleユーザーがよく体験すること

Aさん、「MySQLに接続して別のセッションでアップデートしたのがselectしても見えないな~。」(トランザクション分離レベル)リピータブルリードなのでAさんがselectした時点でデータが保持されます。

対策:commit;<enter>でタイムポイントを進める必要があります。その後再度selectするとアップデートしたものを見ることが出来ます。

オートコミットがデフォルトです。必要な場合には、start transactionしてください。

Page 15: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

15

トランザクション分離レベル

リピータブルリードとか、リードコミッテッドとか面倒な用語はいろいろあるのですが、要は

1.TCP接続した後に他のTCP接続のコミットが見られるのがリードコミッテッド(Oracle)。

2.TCP接続した後に他のTCP接続のコミットが見られないのがリピータブルリード(MySQL)。

Page 16: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

16

SQLクエリーオプティマイザー

SQLクエリーオプティマイザーがOracleほど頭が良くありません。(ある程度の最適化は出来ますが、複雑なものになると.....。)例えば難しいクエリーで、joinしてorderしてgroupしてuniq…とかするとtmpテーブルを作り始めます。oracleでもtmpテーブルを作ると思いますが、諦めが早い気がします。

このtmpテーブルが大きな問題を引き起こすことが多いです。

Page 17: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

17

tmpテーブルとは?

MySQLで複雑なjoinやgroupで、一時的に用意されるテーブル。メモリー上にMEMORYストレージエンジンで用意される。この利用されるメモリーサイズがtmp_table_sizeを越える場合には、MyISAMストレージエンジンに変換されてDiskに保存される。「Diskに保存される」ここが問題!

超遅いです。チューニングでもこれを真っ先に見るぐらい

Page 18: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

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コ

19

tmpdirをRAM Disk上に!

OS上にRAM Diskを確保して、my.cnfに「tmpdir」をRAM Diskに指定する。

結局メモリー頼みです。そんな時にマシンが落っこちたら....。アウトです。

Page 20: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

20

MySQLはハードウェアの性能に大きく依存する、と思う

Oracleは貧弱なハードウェアでもある程度スピードが出るように作られている(ような気がします)

MySQLは、ハードウェア(特にDiskI/O回り)に大きく依存する作りな気がします。#Linuxにも言えることですが。

なので、最近MySQLにお勧めなのが

SSDです。ソーシャルゲーム系でも今は、SSD無しでは成り立たないそう。

Page 21: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

21

MySQLでSSDを利用したテスト

上記の/etc/my.cnfは、デフォルト(ダメダメな設定)です。もう、MySQLチューニングなんて要らないんじゃないかと思うぐらいです。(T_T)単位:Transaction/sec

Page 22: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

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コ

23

MySQLでチューニング

explainしましょう。(アテにならなことも....。実データでやった方が安心です。analyzeも)

Hint文使えます。

my.cnfをデフォルトで使わない。

1台で何でもやろうと思わないこと。

Page 24: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

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コ

25

以下の様なサービスを提供しています。

BGTマネージドクラウド

障害監視サービス

サーバー運用サービス

Webサイト負荷テストサービス

サイトチューニングサービス

MySQL DBマネージドサービス

ビーグッド・テクノロジーのサービス

Page 26: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

BGTマネージドクラウド PaaS for GeneXus

26

開発ベンダー様にてニーズがあればご提供を検討

GeneXusでの開発メリットを最大限に引き出すためのGeneXus実行環境クラウドサービス

for

Page 27: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

テスト環境、本番環境の提供

27

GeneXus実行環境

テンプレート

③サービス利用開始

①テンプレート選択

開発担当

②コードデプロイ

GeneXus開発環境

利用者

DBサーバ

WindowsサーバLinuxサーバ

GeneXusの実行環境を簡単に立ち上げてお客様に提供する事が可能です。

for

Page 28: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

サービス提供開始までの期間を大幅短縮

28

開発

これまでのサービス構築

サーバー構築

開発

GeneXus+PaaSでのサービス構築

サーバー

構築

GeneXusで工期短縮

PaaSで工期短縮

テスト環境

構築お客様テスト

サーバー調達不要

ネットワーク構築不要

サーバー設置不要

Page 29: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

各種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コ

30

MySQL DBマネージドサービス

キャッチフレーズ『MySQLの面倒なあれやこれ。面倒見ます。』

例)

MySQLを使っていて遅くなった。見て欲しい。

MySQLで冗長化して欲しい。

MySQLでバックアップの面倒を見て欲しい。

定期的なチューニング監視をして欲しい。

弊社提供のクラウドサービスをご利用頂ければ、MySQLのお悩みごとを解決いたします。

Page 31: MySQLを使って困ることあれこれ - ne...MySQLチューニングで実際にあった話 MySQLが早いというのでOracleをやめて導入 してみた。Oracleのバッチの頃、処理が重かったので4コ

31

まとめ

MySQLは、Oracleの感覚で使うと困ることになります。MySQLの作法を覚えましょう。

適材適所で利用しましょう。

チューニングしないと後から困ることになります。

面倒な方は、BGTマネージドクラウドでMySQL DB マネージドサービスを利用すると便利です。