SlideShare una empresa de Scribd logo
1 de 10
やってはいけない空振りdelete
SQLアンチパターンNight Part2
07/10 2017
山田 雄
ネットビジネス本部
データ基盤チーム
■山田 雄(ヤマダ ユウ)
株式会社 リクルートライフスタイル
ネットビジネス本部
データ基盤T
Twitter:@nii_yan
GitHub:https://github.com/yu-yamada
・以前はフリーランスエンジニア
縁があってリクルートライフスタイルにお世話になることになった。
ビックデータ、Ruby、ビール、カップ焼きそばが好き。
自己紹介
こんなテーブルに
mysql> select * from lock_test;
+----+------+
| id | name |
+----+------+
| 1 | aa |
| 2 | bb |
+----+------+
こんなデータが入ってる時
mysql> desc lock_test;
+-------+---------------+------+-----+---------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------------------+
| id | int(11) | NO | MUL | NULL | auto_increment |
| name | varchar(10) | YES | MUL | NULL | |
+-------+---------------+------+-----+---------+-------------------+
このdmlと
lockのかかり方が違うのご存知ですか?
試験環境 Mysql(5.7.18)
delete from lock_test where id = 2;
このdmlで
delete from lock_test where id = 100;
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
// 存在しないidをdelete
mysql> delete from lock_test where id = 100;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into lock_test (name) values
("bb");
Query OK, 1 row affected (0.01 sec)
insertを行える
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
// 存在するidをdelete
mysql> delete from lock_test where id = 1;
Query OK, 1 rows affected (0.00 sec)
mysql> insert into lock_test (name) values
("bb");
ERROR 1205 (HY000): Lock wait timeout
exceeded; try restarting transaction
LOCKがかかりinsertが行えない
ターミナルA ターミナルB
MySQLでは、存在しないindexに対し
て更新処理を行った時に発生するファ
ントム問題を回避するため、ネクスト
キーロックというよーわからん機能が
あります。
https://dev.mysql.com/doc/ref
man/5.6/ja/innodb-next-key-
locking.html
Deadlock起こすパターンもあります。
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
// 存在しないid(100)をdelete
mysql> delete from lock_test where id = 100;
Query OK, 0 rows affected (0.00 sec)
// ターミナルAの後にinsert発行するとDeadlock
mysql> insert into lock_test (name) values
("bb");
ERROR 1213 (40001): Deadlock found when
trying to get lock; try restarting transaction
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
// 存在しないid(100)をdelete
mysql> delete from lock_test where id = 100;
Query OK, 0 rows affected (0.00 sec)
// まずこちらでinsert分発行
mysql> insert into lock_test (name) values
("bb");
// ターミナルBでDeadlockが起こった後に実行され
る
Query OK, 1 row affected (2.90 sec)
ターミナルA ターミナルB
みなさん空振りdelete(update)はやら
ないようにしましょう。
ご清聴ありがとうございました

Más contenido relacionado

La actualidad más candente

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
 

La actualidad más candente (20)

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 

Similar a やってはいけない空振りDelete

沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Hideki Saito
 
Control distribution of virtual machines
Control distribution of virtual machinesControl distribution of virtual machines
Control distribution of virtual machines
irix_jp
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
 

Similar a やってはいけない空振りDelete (20)

MySQL clients
MySQL clientsMySQL clients
MySQL clients
 
今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
ヤフーのRDBと最新のMySQLの検証結果#yjdsw3
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
 
5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
Control distribution of virtual machines
Control distribution of virtual machinesControl distribution of virtual machines
Control distribution of virtual machines
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
 
MariaDB 10.3 概要
MariaDB 10.3 概要 MariaDB 10.3 概要
MariaDB 10.3 概要
 
道具を磨くことのススメ
道具を磨くことのススメ道具を磨くことのススメ
道具を磨くことのススメ
 
私とmysqlとROLE
私とmysqlとROLE私とmysqlとROLE
私とmysqlとROLE
 
Index shotgun on mysql5.6
Index shotgun on mysql5.6Index shotgun on mysql5.6
Index shotgun on mysql5.6
 
MariaDB meetup Tokyo 2019 #01
MariaDB meetup Tokyo 2019 #01MariaDB meetup Tokyo 2019 #01
MariaDB meetup Tokyo 2019 #01
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
 
JOSUG 34th Meetup
JOSUG 34th Meetup JOSUG 34th Meetup
JOSUG 34th Meetup
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
 

Más de Yu Yamada

Más de Yu Yamada (12)

Google cloudnext recap_DataAnalytics
Google cloudnext recap_DataAnalyticsGoogle cloudnext recap_DataAnalytics
Google cloudnext recap_DataAnalytics
 
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
 
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
 
ここがつらいよAws batch
ここがつらいよAws batchここがつらいよAws batch
ここがつらいよAws batch
 
オンプレ、クラウドを組み合わせて作るビックデータ基盤 データ基盤の選び方
オンプレ、クラウドを組み合わせて作るビックデータ基盤  データ基盤の選び方オンプレ、クラウドを組み合わせて作るビックデータ基盤  データ基盤の選び方
オンプレ、クラウドを組み合わせて作るビックデータ基盤 データ基盤の選び方
 
リクルートライフスタイルの売上を支える共通分析基盤
リクルートライフスタイルの売上を支える共通分析基盤リクルートライフスタイルの売上を支える共通分析基盤
リクルートライフスタイルの売上を支える共通分析基盤
 
kafkaのデータをRedshiftへ入れるパイプライン作ってみた
kafkaのデータをRedshiftへ入れるパイプライン作ってみたkafkaのデータをRedshiftへ入れるパイプライン作ってみた
kafkaのデータをRedshiftへ入れるパイプライン作ってみた
 
Uuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたUuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみた
 
リクルートライフスタイルのデータを支える技術
リクルートライフスタイルのデータを支える技術リクルートライフスタイルのデータを支える技術
リクルートライフスタイルのデータを支える技術
 
オンプレとクラウドのHadoopを比較して僕の思うとこ
オンプレとクラウドのHadoopを比較して僕の思うとこオンプレとクラウドのHadoopを比較して僕の思うとこ
オンプレとクラウドのHadoopを比較して僕の思うとこ
 
僕の考える最強のビックデータエンジニア
僕の考える最強のビックデータエンジニア僕の考える最強のビックデータエンジニア
僕の考える最強のビックデータエンジニア
 
CDH4->5 update苦労話
CDH4->5 update苦労話CDH4->5 update苦労話
CDH4->5 update苦労話
 

Último

Último (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

やってはいけない空振りDelete