SlideShare uma empresa Scribd logo
1 de 32
理論から学ぶデータベース
実践入門Night
VOYAGE GROUP
@hironomiu
MVCCでちょっとハマった話
自己紹介
• Twitter @hironomiu
• VOYAGE GROUP システム本部
• 入社当時 DBA(MySQL,Oracle,PureData,etc)
• 現在 技術者育成責任者
• 主に新卒、内定者の育成
• エンジニアインターンの開催
My Job
• http://techlog.voyagegroup.com/entry/2015/09/08/114507
My Job
My Job
本題!
MVCCのちょっと
ハマった話
(とあるRDBMS)
ちなみにMVCC
って単語は好きです
なんかかっこいい
!
余談ですが現職での出
来事ではありません
MVCCとは
• P341
MVCCとは
• MultiVersion Concurrency Controlの略
• トランザクションの並列生を高めるために編み
出されたしくみがMVCC(MultiVersion
Concurrency Control)です。(P341抜粋)
何があったの?
• MVCCの仕組みによってパ
フォーマンス劣化
状況
• 一つの商品に注文が集中するショ
ッピングサイト
• 成約のタイミングで在庫を減らす
• select * from foo where item = “var”
• update foo set count = cnt -1where item = “var”
状況
商品確認
商品紹介、在庫数
注文
ショッピングサービス
start tran
select ~
select * from foo where item = “var”
select ~
end tran
成約
start tran
select ~
update foo set count = cnt -1
where item = “var”
end tran
状況
数千のアクセスが同じ商品に一斉に!
商品確認
商品紹介、在庫数
注文
ショッピングサービス
start tran
select ~
select cat from foo where item = “var”
select ~
end tran
start tran
select ~
update foo set count = cnt -1
where item = “var”
end tran
成約
状況
少しずつ遅くなる
商品確認
商品紹介、在庫数
注文
ショッピングサービス
start tran
select ~
select * from foo where item = “var”
select ~
end tran
成約
start tran
select ~
update foo set count = cnt -1
where item = “var”
end tran
なぜ遅くなるんだろう
?
なぜ遅くなるんだろう
?
ロック?
I/Oの限界? CPU?
SQLがいけてない?
INDEX?
データモデルがいけてない?
調べると
MVCCの仕組みが
ボトルネックぽい
MVCCとは
• MVCCを使うと、あるトランザクションが更新
してしまったデータについて、別のほかのトラ
ンザクションは過去の古いバージョンを参照で
きます。(P342抜粋)
• MVCCにおける古いバージョンの値は、ロール
バックセグメントという領域に格納されます。
(P342抜粋)
性能劣化が起きる状況
• 特定のページ(ブロック)に対して在庫の減算結果
の更新(UPDATE)が集中
• 上の大量の更新のタイミングで同じページ(ブロ
ック)に対し大量の在庫数の問い合わせ
(SELECT)
SQLの統計情報から
• 「select * from foo where item = “var”」を1回実
行すると時間がたつにつれて応答を返すために
走査するページ(ブロック)数が線形に増加してい
た
Why?
Why?
特定のページ(ブロック)しか読まないのに?
MVCCとは(再)
• MVCCを使うと、あるトランザクションが更新
してしまったデータについて、別のほかのトラ
ンザクションは過去の古いバージョンを参照で
きます。(P342抜粋)
• MVCCにおける古いバージョンの値は、ロール
バックセグメントという領域に格納されます。
(P342抜粋)
状況
商品確認
商品紹介、在庫数
ショッピングサービス
select * from foo where item = “var”
DATA RBS
古いバー
ジョン1
古いバー
ジョン1
古いバー
ジョン1
古いバー
ジョン1
古いバー
ジョン1
古いバー
ジョン
対策
• いろんな方法で対策しました!
それだけではなく
現在はMVCCで過去のデ
ータを参照する際にO(N)
のようなページ(ブロック
)走査は対策されています
エレガントなMVCCに!
まとめ(伝えたいこと)
• MVCCでハマった話を例にしましたが、
広く多く様々な状況で使われているプロ
ダクトは様々な状況に対応できるよう改
良が加えられて生き残っているものが多
いと思います。
まとめ(伝えたいこと)
• 新しいDB(RDB、NoSQL)もすごく魅力的
でカタログスペックにワクワクすること
も多々あるんですが、使い込まれ改善さ
れ続けている安心感もDBの選択には必要
な視点だなと改めて思った出来事でした
!
ご清聴ありがとうございました!

Mais conteúdo relacionado

Mais procurados

Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
タカシ キタジマ
 

Mais procurados (7)

20120128
2012012820120128
20120128
 
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
 
情報セキュリティCAS 第三十六回放送用スライド
情報セキュリティCAS 第三十六回放送用スライド情報セキュリティCAS 第三十六回放送用スライド
情報セキュリティCAS 第三十六回放送用スライド
 
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
 
レスポンシブ・イメージのWordPressへの実装と4.4
レスポンシブ・イメージのWordPressへの実装と4.4レスポンシブ・イメージのWordPressへの実装と4.4
レスポンシブ・イメージのWordPressへの実装と4.4
 
20140322
2014032220140322
20140322
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 

Destaque

Destaque (8)

集合演算を真っ向から否定するアレの話
集合演算を真っ向から否定するアレの話集合演算を真っ向から否定するアレの話
集合演算を真っ向から否定するアレの話
 
NULLとの戦い RDBMS実装編
NULLとの戦い RDBMS実装編NULLとの戦い RDBMS実装編
NULLとの戦い RDBMS実装編
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
 
ならば(その弐)
ならば(その弐)ならば(その弐)
ならば(その弐)
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 

Semelhante a 理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話)

090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
 

Semelhante a 理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話) (20)

作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
 
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
勉強会:設定管理について
勉強会:設定管理について勉強会:設定管理について
勉強会:設定管理について
 
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
使ってわかった!現場担当者が語るOpenStack運用管理の課題:OpenStack Days 2015 Tokyo 講演
 
Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門
 
SpringBoot開発の基本
SpringBoot開発の基本SpringBoot開発の基本
SpringBoot開発の基本
 
Introducing microsoft learn
 Introducing microsoft learn Introducing microsoft learn
Introducing microsoft learn
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
 
Azure DevOps CICD Azure SQL / Data Factory
Azure DevOps CICD Azure SQL / Data FactoryAzure DevOps CICD Azure SQL / Data Factory
Azure DevOps CICD Azure SQL / Data Factory
 

Mais de Hironori Miura (6)

リーンスタートアップ的な価値のあるモノ創り
リーンスタートアップ的な価値のあるモノ創りリーンスタートアップ的な価値のあるモノ創り
リーンスタートアップ的な価値のあるモノ創り
 
SQLアンチパターンNight
SQLアンチパターンNightSQLアンチパターンNight
SQLアンチパターンNight
 
「360°スゴイ」を創るVOYAGE GROUPエンジニア成長施策
「360°スゴイ」を創るVOYAGE GROUPエンジニア成長施策「360°スゴイ」を創るVOYAGE GROUPエンジニア成長施策
「360°スゴイ」を創るVOYAGE GROUPエンジニア成長施策
 
VOYAGE GROUPの成長する勉強会カルチャー
VOYAGE GROUPの成長する勉強会カルチャーVOYAGE GROUPの成長する勉強会カルチャー
VOYAGE GROUPの成長する勉強会カルチャー
 
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
 
MySQL5.6検証レポート
MySQL5.6検証レポートMySQL5.6検証レポート
MySQL5.6検証レポート
 

理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話)