SlideShare uma empresa Scribd logo
1 de 20
DBチューニング(改善)事例を現行と他システム(別サービス)の観点から行ったことについて記
述。
問題点(一体何が起きてる??)
との連携
へ移行
(一体
• DBアクセス時に全件、2400件のSELECTが5秒以上掛かり、
大量扱いされ500msから1000msのsleep待ちをかけないと
レスポンスタイムが落ちる。
(一体
• DBに対する総合的な知識が必要、単純にslow queryだけで判
断してはならず、DBの論理・物理設計の両面から原因を極
め、根本的な解決に挑めなければならない。 上記一テーブル
の場合に全件が少量にも関わらず、5秒以上掛かったのは、
DB アクセス時にクエリを作成できず、KVSを模倣し、全て
のテーブルをキーとバリューの2カラムのみに構成してしま
いwhereの条件句が効かない構造(マ ルチインデックスが存
在しない)にも問題があるが、 システムのcoreモジュール
から自動生成されるクエリ中のorder by句にも直接起因す
る。DB上のクエリでorder by(ソート)句というのはデータ
のFULL SCANを誘発する原因であるため、使い方には慎重
を期する必要がある。
(一体
• なお、単純に一テーブルのデータを無理ありに減らそうとす
ると、目的を洗い出せば仕様上必要な情報を集めた集合体
(エンティティ)であり、一丸に不要とは断言出来ず、仕様
に対して不知案内である。
• 先述した理由により全件、2400件で大量というのは、十分誤
解を招く恐れがあるため、このような言葉には選びに注意を
要する。 また、システムの作り上、coreモジュールだけに解
決が難しい場合、前書きとして現状を深く理解することによ
り、 単純実行時間で遅い、早いで物事の全てを判断すること
により根本的改善の努力を怠慢してはいけない。
(一体
• しかし、こんなに遅いDBも久しぶりで非常に興味深い。お
そらくクエリ実行時に既に実行中の片方のクエリが相互に影
響を与えているか、単に物理的にテーブ ル数などがスペック
を超えてる可能性もあると思われる。 これらを0.01秒も惜し
いのにわざとsleep待ちを掛けなくても少しDBチューニング
するだけで爆速になりそう。
• 考えられる改善案としては、現状を変えず、踏襲しながらス
キーマを一部変更することによりデータアクセスの時間、及
び量の両方を根本的に改善することができる。
(一体
• クエリモジュールにて不要なソートを取りやめ、セカンダリ
インデックスをwhere句に指定することにより
• 頻度が高いデータバリュー(データ項目)を全体、単独で抽
出することができる。止むを得ずData redundancy(データ
の重複)は発生するが、これ以上のパフォーマンス劣化を止
められる。また各モジュールのどこからロスが発生するか見
直す必要がある。
論理アプローチ
論理アプローチ
• 一columnのサイズを小か中盛りにする。
• 不要のorder by句の削除
• 現状サービスロジックに照らして原則DB内のソート不要、
かつ障害の原因特定のために可能な限り、候補要素が排除す
べき。
• 上記の分析結果からkeyの「PRIMARY」 keyが貼り与えられ
インデックスが効いてるように見えるが 「possible_keys」
がNULLのため、実際INDEX_FULL_SCANが行われている、
PKはUNIQUE属性のため、 TABLE_FULL_SCANとパフォー
mysql> explain select id, data from imitated_kvs_table order by id asc;
+----+-------------+------------------------------+-------+---------------+---------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------------------+-------+---------------+---------+---------+------+------+-------+
| 1 | SIMPLE | imitated_kvs_table | index | NULL | PRIMARY | 257 | NULL | 2526 | |
+----+-------------+------------------------------+-------+---------------+---------+---------+------+------+-------+
1 row in set (0.00 sec)
論理アプローチ
• セカンダリインデックス(Secondary Index)の付与:条件
検索を行い、スキャンの効率を向上させるため、longblob内
の部分値に対してインデックスを追加。
• 現状、2カラム
• 改善案、
create table...
id varbinary(255)
data longblob
primary key (id)
create table...
id varbinary(255)
data longblob
SECONDARY_INDEX_1 varbinary(255)...
PRIMARY KEY (id),
INDEX (SECONDARY_INDEX_1)
...
論理アプローチ
• テーブルpartition不可:バイナリタイプPKではLookupのI/O
が急増するため、パーティション無意味。
• PKのソートの用途:PKの条件検索に対してその値は文字
コード(UTF8)になるため、adjacent(隣接する)データの
パータン検索としては有用。
物理アプローチ
物理アプローチ(ソートに関する
チェックリスト)
• max_length_for_sort_data値のサイズをあげる:厳密に言う
と下げ過ぎでないかを確認、ソート時の二重読み込みを防ぐ
ために タプルを用いたfilesortアルゴリズムが有効、従って
optimizerに左記アルゴリズムを適用するためには
max_length_for_sort_data(システム変数)を上げる。 ※注
意:上記サイズを上げ過ぎるとDisk I/O↑、CPU activity↓発生
• sort_buffer_sizeを上げる:セッションごとに割当、Max
4GB、Engineに属しない
• read_rnd_buffer_sizeを上げる :セッションごとに割当、Max
は2GB、Engineに属しない
• tmpdirには大容量の物理ディスクを割り当てる。 :
Temporarily file領域がFullになってため、rotationがはしてな
いか確認
• ※注意:OSのmemori allocation threshold(しきい値)を考
慮。 ※個人的に検証時倍数を割り当てることにより最適値を
物理アプローチ(ソートに関する
チェックリスト)
• もし、本当に、まじで、本物のKVSにしたいなら、下記鉄則を守る
こと。
• 1.テーブルのデータを100~200Mbytes程度の大きさに分割した
テーブル(「タブレット」)を管理
• 2.1台のテーブル(「タブレットサーバ」)は100個以下のタブレッ
トを保存
• ※グーグルの場合、低スペックPCサーバ1台当たり約10~20Gbytes
程度
• クエリ +---+ recipe(レシピー):metaサーバ
+
|
+ ID range, tablename, サーバIP, fetch
1~100 , 格納テーブル名, タブレットサーバの場所, 現在の件数(増
加分)
• タブレットサーバ:実データ
オプション
コピーサーバ:タブレットを複製し、分散する。
他システムから本体のDBが参照さ
れる場合
• 実際異なるDBを股がってデータ取得する際に、APIやjsonやメッ
セージングなどその方法は数多く存在する。しかし元の(下記の
Origin)DBにて遅延が発生する場合、あらゆる方法でもドミノ遅延
が発生してしまう。
• なるべくI/Oを減らす方法に検討する必要がある。Newbie System(他システム)
|
+----------------------+
Older DB(現行DB) Newbie DB(他DB)
タイプはそのまま引き継ぎながら、
Older [OLD_SAMPLE Table]
ID varbinary-------------------------+
DATA |
|
Newbie | [SAMPLE Table] |
SAMPLE_CODE int |
SAMPLE_NAME varchar(10) |
FK_ID varbinary--------------------+
他システムから本体のDBが参照さ
れる場合
• ここで問題はOlderはインデックスがないため、PKで特定できる
データではないとOlderからデータ取得にBottleneckが発生。
• 恐らくOlderからリアルタイム取得に必要なデータ(エンティ
ティ)は決まっていると予想できるため、コンバート(変換)サー
バを通じて、OlderとNewbie DBから取得したデータをマージさせ
る。
• マージ方法は、NewbieのFKカラムを設け、OlderのPKを取得
(SELECT)し、保持(INSERT)する。初回以降FKが有効になっ
てるため、DBの全体アクセスパフォーマンスが向上。
NoSQL
• 現行のDBと他システムDBをHypertable(NoSQL)を用いて一つに統
合する。
• Hypertableの概要は以下、
http://edydkim.github.io/2013/04/26/hypertable-distilled/
• クエリキャッシュ、マルチインデックスが可能など機能が豊富。
おまけ(テーブルの分散方法)
• mysql> desc test;
+-------+----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| id | varbinary(255) | NO | PRI | NULL | | | data | longblob | NO | | NULL | |
+-------+----------------+------+-----+---------+-------+
2 rows in set (0.17 sec)
mysql> select id, data from test;
+------+------+
| id | data |
+------+------+
| test | test |
+------+------+
mysql> select hex(id) from test;
+----------+
| hex(id) |
+----------+
| 74657374 |
+----------+
1 row in set (0.00 sec)
おまけ(テーブルの分散方法)
• mysql> select hex(id) from test where hex(id) > hex(0) and hex(id) < hex(8);
+----------+
| hex(id) |
+----------+
| 74657374 |
+----------+
1 row in set (0.00 sec)
mysql> select hex(id) from test where hex(id) < hex(15);
+----------+
| hex(id) |
+----------+
| 31 |
| 74657374 |
+----------+
2 rows in set (0.00 sec)
1~F 15分割が可能=15分割のテーブルを用意 課題はhow to divide to 15 equalliy??

Mais conteúdo relacionado

Mais procurados

Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
Masahiko Sawada
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルCOD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
Masayuki Ozawa
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
Yoshinori Matsunobu
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Masayuki Ozawa
 

Mais procurados (19)

Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 
MySQL のオンラインバックアップ & リカバリ
MySQL のオンラインバックアップ & リカバリMySQL のオンラインバックアップ & リカバリ
MySQL のオンラインバックアップ & リカバリ
 
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
 
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルCOD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
 
Couchbase meetup20140925
Couchbase meetup20140925Couchbase meetup20140925
Couchbase meetup20140925
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
JTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontlineJTF2021w F3 postgresql frontline
JTF2021w F3 postgresql frontline
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
MySQL カジュアル 福岡 03
MySQL カジュアル 福岡 03MySQL カジュアル 福岡 03
MySQL カジュアル 福岡 03
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
PostgreSQL UPDATEs 2016年5月 - OSC群馬
PostgreSQL UPDATEs 2016年5月 - OSC群馬PostgreSQL UPDATEs 2016年5月 - OSC群馬
PostgreSQL UPDATEs 2016年5月 - OSC群馬
 
脱Oracleはここから!SQL Server on Linuxにも対応した移行手法をご紹介!!
脱Oracleはここから!SQL Server on Linuxにも対応した移行手法をご紹介!!脱Oracleはここから!SQL Server on Linuxにも対応した移行手法をご紹介!!
脱Oracleはここから!SQL Server on Linuxにも対応した移行手法をご紹介!!
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
 

Semelhante a Tuning on my_sql

過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策
Atsuo Yamasaki
 

Semelhante a Tuning on my_sql (20)

Impala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajpImpala 2.0 Update 日本語版 #impalajp
Impala 2.0 Update 日本語版 #impalajp
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlCassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
Couchbase meetup20140225[Release Note 2.5]
Couchbase meetup20140225[Release Note 2.5]Couchbase meetup20140225[Release Note 2.5]
Couchbase meetup20140225[Release Note 2.5]
 
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみたA 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策過去事例から学ぶ SharePoint パフォーマンス問題とその対策
過去事例から学ぶ SharePoint パフォーマンス問題とその対策
 
データベースのお話
データベースのお話データベースのお話
データベースのお話
 
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data PipelineAWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
 
2019年度若手技術者向け講座 インデックス
2019年度若手技術者向け講座 インデックス2019年度若手技術者向け講座 インデックス
2019年度若手技術者向け講座 インデックス
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
Dat004 開発者に捧ぐ「sql server_2016_
Dat004 開発者に捧ぐ「sql server_2016_Dat004 開発者に捧ぐ「sql server_2016_
Dat004 開発者に捧ぐ「sql server_2016_
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
 
2019年度 若手技術者向け講座 DBMSの機能
2019年度 若手技術者向け講座 DBMSの機能2019年度 若手技術者向け講座 DBMSの機能
2019年度 若手技術者向け講座 DBMSの機能
 
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
 
Sql azure入門
Sql azure入門Sql azure入門
Sql azure入門
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
FutureTechNight_GoogleCloudデータ活用勉強会.pptx
FutureTechNight_GoogleCloudデータ活用勉強会.pptxFutureTechNight_GoogleCloudデータ活用勉強会.pptx
FutureTechNight_GoogleCloudデータ活用勉強会.pptx
 
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
 

Tuning on my_sql