SlideShare a Scribd company logo
もしOracleDBAがMySQL を管理
することになったときの注意点など
2019/12/04
JPOUG in 15 minutes #9
Kentaro Kitagawa(@keny_lala)
自己紹介
名前: Kentaro Kitagawa
仕事: とある会社de DBA
担当: MySQL,Oracle,Redis
twitter: @keny_lala
1年ほど前
前提
資料の中のMySQLはInnoDB ストレージエンジン
とします
ストレージエンジン
出典: https://dev.mysql.com/doc/refman/5.6/ja/glossary.html
MySQL データベースのコンポーネントの1 つ。データの格納、更
新、および照会という低レベル作業を実行します。MySQL 5.5 以降で
は、InnoDB が新しいテーブルのデフォルトストレージエンジンであ
り、MyISAM の代替となるものです。メモリー使用とディスク使用、
読み取り速度と書き込み速度、速度と堅牢性など、異なる要因間トレ
ードオフのために異なるストレージエンジンが設計されています。各
ストレージエンジンが特定のテーブルを管理するので、InnoDB テー
ブル、MyISAM テーブルなどと呼びます。
“
“
アジェンダ
フルスキャンの注意点
ロックの注意点
メタデータロック
ReadCommitedでの行ロック
フルスキャンでの注意点
Oracleのフルスキャン
TABLE ACCESS FULL
INDEX FAST FULL SCAN
マルチブロックリード(db_ le_multiblock_read_count)
ダイレクトパスリード
Parallel Query(EE)
MySQLのフルスキャン
Type: ALL ・・テーブルフルスキャン
Type: INDEX ・・インデックスフルスキャン
シングルページリード
JOINアルゴリズム
Oracle
Nested Loop Join
Hash Join
Merge Join
MySQL
Nested Loop Join
フルスキャンのJOIN
Oracle
HASH JOINでマルチブロックリード
MySQL
Nested Loop JOINでシングルページリード
フルスキャンのJOIN
Oracleはフルスキャンを最適化する機能がある
OracleとMySQLでは、速度にかなりの違いが出る
部分
MySQLのクエリチューニングするときは、Nested
Loop Joinしかないこととシングルページリードし
かないことを意識して、フェッチする行やページ
へのアクセス量を減らすこと。インデックス設計
も必須。
(そもそもフルスキャンはだめ絶対。)
MySQL 8.0+
Hash Join (MySQL8.0.18+)
Indexのないカラムの等価結合に動作する
InnoDB table Non locking parallel reads
CHECK TABLE or SELECT COUNT(*) FROM tbl
がパラレルで実行可能
@atsuizoさんのブログ
MySQL 8.0.14でSELECT COUNT(*)が加速する!-
「innodb_parallel_read_threads」検証その1
ロックでの注意点
MySQLのロックといえば、、
クラスタインデックス(Oracleでいう索引構成表)で管理されていて、走
査したレコード全てにロックをとる。
MySQLはレコードロックだが、それ以外に特殊なロックがある。
ギャップロック・・インデックスレコード間にあるギャップのロック
ネクストキーロック・・インデックスレコードに対するレコードロック
と、そのインデックスレコードの前にあるギャップに対するギャップロ
ックとを組み合わせたもの
たとえば、SELECT * FROM t0 WHERE col=2 FOR UPDATE; でcolカラムにインデ
ックスがない場合、フルスキャンになる。そのときにすべての行でロッ
クがとられる
今回はこの話ではないので、詳しくは@sh2さんと
@yyamasaki1さんの資料をご確認ください。
https://sh2.hatenablog.jp/entry/20140914
https://speakerdeck.com/yoshiakiyamasaki/lt-
mysqlfalsegiyatupurotukutonekusutokirotukunituite
ギャップロックとネクストキーロック
トランザクション分離レベル
Oracle - READ_COMMITED (Default)
MySQL - REPEATABLE_READ (Default)
MySQLのトランザクション分離レベルを
READ_COMMITED に変更すると、Oracleと同等の行ロ
ックになる。ギャップロックとネクストキーロッ
クが無効化される。
Oracle開発者がMySQLを使用するときは
READ_COMMITED に変更すれば、これらのロックを気
にする必要はない
しかし!!
READ_COMMITED にしても、OracleDBAであれば注意
しなくてはいけないロックがある。
メタデータロック
OracleでいうTMロックに似たもの
別のトランザクションによって同時に使用されているテーブルでの
DDL 操作を防止するタイプのロック。
“
“
オンライン操作への拡張機能は(特にMySQL 5.6 以降)、メタデータ
ロックの量を減らすことに注力しています。その目標は、ほかのトラ
ンザクションによってテーブルに照会や更新などが行われている間
に、テーブル構造を変更しないDDL 操作(InnoDB テーブルに対する
CREATE INDEX やDROP INDEX など) を進行できるようにすること
です。
出典: https://dev.mysql.com/doc/refman/5.6/ja/glossary.html
“
“
Oracle
Tx1 Tx2
Transaction Start.
INSERT t0;
TRUNCATE t0; <- Waiting
Commit;
Done
Tx2のTruncateは待たされる
(DDL_LOCK_TIMEOUT)。Tx1のcommit後、
Truncateが実行される。
Oracle
Tx1 Tx2
Transaction Start.
SELECT t0;
TRUNCATE t0; <- NoWait
Commit;
Tx2のTruncateは待たされない。
MySQL
Tx1 Tx2
BEGIN;
INSERT t0;
TRUNCATE t0; <- Waiting
Commit;
Done
Tx2のTruncateは待たされる。Tx1のcommit後実行
される。
MySQL
Tx1 Tx2
BEGIN;
SELECT t0;
TRUNCATE t0; <- Waiting
Commit;
Done
Tx2のTruncateは待たされる。Tx1のcommit後実行
される。
Non BlockingなSELECTでもロック取得
メタデータロック
トランザクション中にSELECTしたテーブル(Non
Blocking Read)は、トランザクション中は共有メタ
データロックを取得する。
トランザクション終了後、その共有メタデータロ
ックは開放される
共有メタデータロックは競合しないが、DDLなど
では排他メタデータロックを取得するために待機
する。
よって、ロングトランザクションがある場合の
DDLは注意するべき。
さらに注意してほしいこと。。
MySQL
Tx1 Tx2 Tx3 Tx4
BEGIN; - BEGIN; -
SELECT t0; - - -
- TRUNCATE t0;-Waiting - -
- - SELECT t0;-Waiting -
- - BEGIN;
- - SELECT t0;-Waiting
排他メタデータロック取得するために待機した以
降のSELECTがすべて待機される(共有メタデータロ
ックが取得できないため)
(;´艸`)ぁぁぁ
ロックの待機時間はlock_wait_timeoutオプション
で管理。
デフォルト31536000秒(1年)
セッション単位で小さな値にして、DDLするこ
とを推奨。
今回はTRUNCATEでしたが、複数テーブルに跨る
FunctionやTriggerなど作成するときはより注意。
OracleはデフォルトでNOWAIT句が裏でつくよう
なので、ロック取得できないと即時エラー
SQL> TRUNCATE TABLE t0;
TRUNCATE TABLE t0
*
行1でエラーが発生しました。:
ORA-00054: リソース・ビジー。NOWAITが指定されているか、タイムアウトしました
メタデータロックを確認する方法
show processlistのState
ロック待ちしているスレッドを確認できる
mysql> show processlist;
(中略)
+-----+---------+--------+----------------------------------+--------------------+
| Id | Command | Time | State | Info |
+-----+---------+--------+----------------------------------+--------------------+
| 1962| Query | 5 | Waiting for table metadata lock | TRUNCATE TABLE t0 |
Performance Schema のmetadata_locksテーブル
(MySQL5.7+)
ロックを取得されているテーブルを表示
Read Commitedの行ロックの注意点
tx_isolation=READ-COMMITTED だとGap Lock
とNext Key Lockは無効化
DELETE WHERE col=1 → Type: ALL だと、col=1 だけ
をロックする
しかし、MySQLはステートメント実行時に全行ロ
ック(走査した行をロック)して、最後にa=1に一
致しない行のロックを開放する動きとなる
Oracleはステートメント実行中もa=1に一致した行
のみをロックする
よって、REPEATABLE READと同様にINDEXを貼
のが得策である
Oracle(フルスキャンのDELETE)
Tx1 Tx2
Transaction Start. Transaction Start.
DELETE t0 WHERE col=1;
DELETE t0 WHERE col=2; <- NoWait
MySQL(フルスキャンのDELETE)
Tx1 Tx2
Transaction Start. Transaction Start.
DELETE t0 WHERE col=1;
DELETE t0 WHERE col=2; <- Waiting
まとめ
MySQLはフルスキャンは遅い。
シングルページリードしかないことを意識して、必ずインデ
ックスをつかって、フェッチする行やページへのアクセス量
を減らすこと。
Nested Loop Joinしかないことを前提にインデックス設計す
る。
MySQL 8.0+ は速くなりつつある
メタデータロック
オンラインで日時TRUNCATEする処理がある時、ロングト
ランザクションと重ならないことを注意。スレッドが大幅に
詰まる可能性がある。
tx_isolation=ReadCommitedでも適切なインデックスが必要
Oracle的なロックのとり方ではないので、Oracle脳で考え
ると危険
Ad

Recommended

実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
NTT DATA Technology & Innovation
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
Amazon Web Services Japan
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
オンプレミスRDBMSをAWSへ移行する手法
オンプレミスRDBMSをAWSへ移行する手法
Amazon Web Services Japan
 
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
データ基盤の従来~最新の考え方とSynapse Analyticsでの実現
Ryoma Nagata
 
20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS Glue
Amazon Web Services Japan
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
NTT DATA Technology & Innovation
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
Ohyama Masanori
 
Hadoop入門
Hadoop入門
Preferred Networks
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail
Amazon Web Services Japan
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較
株式会社オプト 仙台ラボラトリ
 
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
 
Oracleからamazon auroraへの移行にむけて
Oracleからamazon auroraへの移行にむけて
Yoichi Sai
 
SQL Server コンテナ入門(Kubernetes編)
SQL Server コンテナ入門(Kubernetes編)
Tomoyuki Oota
 
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
Satoru Ishikawa
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
Mamoru Ohashi
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Amazon Web Services Japan
 
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
Amazon Web Services Japan
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
Kosuke Kida
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
NTT DATA Technology & Innovation
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
Keisuke Fujikawa
 
About NoSQL
About NoSQL
hideaki honda
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
 

More Related Content

What's hot (20)

Hadoop入門
Hadoop入門
Preferred Networks
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail
Amazon Web Services Japan
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較
株式会社オプト 仙台ラボラトリ
 
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
 
Oracleからamazon auroraへの移行にむけて
Oracleからamazon auroraへの移行にむけて
Yoichi Sai
 
SQL Server コンテナ入門(Kubernetes編)
SQL Server コンテナ入門(Kubernetes編)
Tomoyuki Oota
 
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
Satoru Ishikawa
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
Mamoru Ohashi
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Amazon Web Services Japan
 
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
Amazon Web Services Japan
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
Kosuke Kida
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
NTT DATA Technology & Innovation
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
Keisuke Fujikawa
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail
Amazon Web Services Japan
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
 
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
 
Oracleからamazon auroraへの移行にむけて
Oracleからamazon auroraへの移行にむけて
Yoichi Sai
 
SQL Server コンテナ入門(Kubernetes編)
SQL Server コンテナ入門(Kubernetes編)
Tomoyuki Oota
 
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
Satoru Ishikawa
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
ぼくらのアカウント戦略〜マルチアカウントでのガバナンスと権限管理の全て〜
Mamoru Ohashi
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Amazon Web Services Japan
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
Kosuke Kida
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
NTT DATA Technology & Innovation
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
 
Data Factory V2 新機能徹底活用入門
Data Factory V2 新機能徹底活用入門
Keisuke Fujikawa
 

Similar to もしOracleDBAがMySQLを管理することになったときの注意点など (20)

About NoSQL
About NoSQL
hideaki honda
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
 
20190530 osc hokkaido_public
20190530 osc hokkaido_public
DAISUKE INAGAKI
 
LINEのMySQL運用について
LINEのMySQL運用について
LINE Corporation
 
My sql security (暗号化)
My sql security (暗号化)
Shinya Sugiyama
 
C32 DB Performance on Cloud by 安藤賀章
C32 DB Performance on Cloud by 安藤賀章
Insight Technology, Inc.
 
Docomo Cloud Package
Docomo Cloud Package
Osaka University
 
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
Insight Technology, Inc.
 
20150920 中国地方db勉強会
20150920 中国地方db勉強会
yoyamasaki
 
MySQLとオープンソースビジネスの10年、そして未来へ
MySQLとオープンソースビジネスの10年、そして未来へ
Open Source Software Association of Japan
 
楽天における大規模データベースの運用
楽天における大規模データベースの運用
Rakuten Group, Inc.
 
Windows環境でのMySQL
Windows環境でのMySQL
yoyamasaki
 
Spiderの最新動向 20130419
Spiderの最新動向 20130419
Kentoku
 
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
sakaik
 
2025年現在のNewSQL (最強DB講義 #36 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
 
Spiderの最新動向 20131009
Spiderの最新動向 20131009
Kentoku
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
比べてみよう リレーショナル vs ドキュメント.pptx
比べてみよう リレーショナル vs ドキュメント.pptx
MariMurotani
 
Rakuten New MySQL Backup System With Xtrabackup
Rakuten New MySQL Backup System With Xtrabackup
Rakuten Group, Inc.
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
 
20190530 osc hokkaido_public
20190530 osc hokkaido_public
DAISUKE INAGAKI
 
LINEのMySQL運用について
LINEのMySQL運用について
LINE Corporation
 
My sql security (暗号化)
My sql security (暗号化)
Shinya Sugiyama
 
C32 DB Performance on Cloud by 安藤賀章
C32 DB Performance on Cloud by 安藤賀章
Insight Technology, Inc.
 
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
[20171019 三木会] データベース・マイグレーションについて by 株式会社シー・エス・イー 藤井 元雄 氏
Insight Technology, Inc.
 
20150920 中国地方db勉強会
20150920 中国地方db勉強会
yoyamasaki
 
楽天における大規模データベースの運用
楽天における大規模データベースの運用
Rakuten Group, Inc.
 
Windows環境でのMySQL
Windows環境でのMySQL
yoyamasaki
 
Spiderの最新動向 20130419
Spiderの最新動向 20130419
Kentoku
 
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
sakaik
 
Spiderの最新動向 20131009
Spiderの最新動向 20131009
Kentoku
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
Masayuki Ozawa
 
比べてみよう リレーショナル vs ドキュメント.pptx
比べてみよう リレーショナル vs ドキュメント.pptx
MariMurotani
 
Rakuten New MySQL Backup System With Xtrabackup
Rakuten New MySQL Backup System With Xtrabackup
Rakuten Group, Inc.
 
Ad

もしOracleDBAがMySQLを管理することになったときの注意点など