SlideShare a Scribd company logo
1 of 18
Download to read offline
マスタ テキストの書式設定
SQLアンチパターン読書会
8章 メタデータトリブル
(メタデータ大増殖)
2013/08/29
@tonyuchi
マスタ テキストの書式設定• 8.1 目的
• 8.2 アンチパターン
• 8.3 アンチパターンの見つけ方
• 8.4 アンチパターンを用いてもよい場合
• 8.5 解決策
• APPENDIX テストデータトリブル
-1 -
アジェンダ
マスタ テキストの書式設定この章の目的は、「クエリの実行速度を劣化させずに、データが増加し続けるテーブルに
対応できるよう、データベースの構造設計をする」ことである。
-2 -
8.1 目的
将来の性能要件も満たす為、データの増加を考慮したデータベース設計を行う必要がある。
リリース時点 2年後
【性能要件】
• 画面レスポンスタイム「3秒以内」 → OK
• 夜間バッチ「7:00までに終了」 → OK
【性能要件】
• 画面レスポンスタイム「3秒以内」 → OK?
• 夜間バッチ「7:00までに終了」 → OK?
1年分保持
(保持期間3年)
3年分保持
(保持期間3年)
マスタ テキストの書式設定
①テーブルを分割するパターン
この章のアンチパターン「メタデータトリブル」は、スケーラビリティを向上させる為にテー
ブルや列を分割(増殖)するパターンである。
-3 -
8.2 アンチパターン:メタデータトリブルの概要
②列を分割するパターン
各年のバグFIX件数を1レコードに格納する例
→1レコードのみ参照すれば、全ての年のバグFIX件数を取得できる
Bugs
Bugs_2008
Bugs_2009
Bugs_2010
Sales
Sales_関東
Sales_関西
Sales_東海
bug_fixed_2008 bug_fixed_2009 bug_fixed_2010
1,024 2,048 4,096
Bugsテーブルを「報告年」にて分割した例
→ 年を特定した検索・集計が高速化
Salesテーブルを「地域」にて分割した例
→ 地域を特定した検索・集計が高速化
メタデータへの
データの混入が発生
マスタ テキストの書式設定
レコードのテーブル間の移動が必要になる例
報告日が変更となり所属するテーブルが変更される場合、テーブルの移動が必要になる。
<1.アプリケーション構築におけるデメリット>
i. INSERT時は挿入する値に応じてテーブルを選択する必要がある。
(8.2.1 テーブルの増殖)
ii. 分割テーブルを跨いだ検索を行う際、UNION使用する必要がある。
(8.2.5 テーブルをまたいだクエリ実行)
iii. 更新時にレコードのテーブル間の移動が必要になる場合がある。
(8.2.3 データの同期)
-4 -
8.2 アンチパターン:メタデータトリブルのデメリット①
Bugs_2010
Bugs_2009
DELETE
INSERT
BUG_ID DATE_REPORTED ・・・
1234 2010/1/3 ・・・
BUG_ID DATE_REPORTED ・・・
1234 2009/12/27 ・・・
マスタ テキストの書式設定<2.データベース管理におけるデメリット>
i. 必要に応じて、新たなメタデータオブジェクトを作成しなくてはならない
(8.2.1 テーブルの増殖)
ii. テーブル定義変更を分割テーブル全てに適用する必要がある。
(8.2.6 メタデータの同期)
iii. テーブルの整合性を管理する為、チェック制約が必要。
(8.2.2 データの整合性を管理する)
iv. 一意性の保証の為に、シーケンスオブジェクトや主キー生成テーブルが必要。
(8.2.4 一意性の保証)
v. 外部キーを定義することができない
(8.2.7 参照性整合性の管理)
-5 -
8.2 アンチパターン:メタデータトリブルのデメリット②
外部キーを定義することができない例
Commentテーブルが子テーブルになる場合、親となるBugsテーブルを複数に分割されており、制約先を単一に指定できな
い為、外部キーを定義することができない。(Commentテーブルも分割すれば外部キーの定義が可能だが・・・)
Bugs_2008
Bugs_2009
Bugs_2010
Comment
マスタ テキストの書式設定以下の発言を耳にした場合、「メタデータトリブル」アンチパターンの兆候あり。
• じゃあ、~(年、地域)ごとにテーブル(または列)を作る必要があるんだね
• このデータベースがサポートしているテーブル(または列)の最大数は?
• 今朝アプリケーションが新規データの追加に失敗した理由がわかった。新しい年のデー
タを格納するためのテーブルを作成し忘れていたんだ
• 複数テーブルを1 回で検索するためのクエリの実行方法は? 全部のテーブルの列は
共通しているんだけど
• テーブル名のパラメータをどうやって渡せばいい? 年が動的に付加されるテーブル名
にクエリを実行する必要があるんだ
-6 -
8.3 アンチパターンの見つけ方
マスタ テキストの書式設定
アーカイブ目的のテーブル分割の例
過去データを最新データから分離することにより、パフォーマンスの劣化を防止でき、データの保持期間を伸
ばすことができる。
-7 -
8.4 アンチパターンを用いてもよい場合
アンチパターン(テーブル分割)を用いてもよい場合は、過去データを最新のデータから
分離するようなアーカイブが目的のときである。
Bugs
※2012-2010年
Bugs
Archive
※2009-2007年
直近3年を保持
(保持期間3年)
過去4年~6年を保持
(保持期間3年)
`
`
一般ユーザ
管理者ユーザ
データパージのタイミングで
移動する(SELECT-INSERT)
3年分
見たい
6年分
見たい
マスタ テキストの書式設定
水平パーティショニング機能とは?
• 論理的(ユーザやアプリケーションから)は1テーブルに見えるが、物理的にテーブルを分割される。
• 行を分割するルールを定義すれば、挿入時のレコードの振り分け等はデータベースで処理される為、
ユーザは1つのテーブルを扱うようにSQLを発行できる。
-8 -
8.5 解決策:①水平パーティショニング(概要)
水平パーティショニング機能を使用することにより、テーブル分割のデメリットに悩むこと
なく、パフォーマンス改善のメリットを享受できる。
`
ユーザ
Bugs
Bugs_2010
Bugs_2009
Bugs_2008
マスタ テキストの書式設定
デメリット:アプリケーション開発
メリット
-9 -
8.5 解決策:①水平パーティショニング(アンチパターンとの比較)
アンチパターンと水平パーティショニング機能の比較結果は以下のとおり。
挿入対象のテーブルを選択しなく
てはならない
分割テーブルを跨いだ検索で
UNIONを使用する必要あり
更新時にテーブル間の移動が必
要なことがある
DB側で処理される為、開発担当者が意
識する必要はない。○×
×
×
テーブル分割単位での検索が高
速化
パーティション分割単位での検索が高
速化○○
アンチパターン(テーブル分割) 水平パーティショニング機能
マスタ テキストの書式設定
デメリット:データベース管理
-10 -
8.5 解決策:①水平パーティショニング(アンチパターンとの比較)
アンチパターンと水平パーティショニング機能の比較結果は以下のとおり。
必要に応じて、新たなメタデータオ
ブジェクトを作成が必要
テーブル定義変更を分割テーブル
に全てに適用
分割したデータの整合性を管理す
る為、チェック制約が必要
パーティションの追加は必要だが、メタ
データとして管理できる。△×
×
×
アンチパターン(テーブル分割) 水平パーティショニング機能
DB側で処理される為、開発担当者が意
識する必要はない。○
一意性を保証するための仕組みが
必要×
外部キーの定義不可
×
プライマリキー・外部キーの定義により
データ整合性の担保が可能○
マスタ テキストの書式設定
テストデータ内容
パーティション分割なしのテーブルBugsとパーティション分割ありのテーブルBugs_Pを作成し、同一のテスト
データを挿入。(データベース Oracle DB 11g R1を使用)
-11 -
8.5 解決策:①水平パーティショニング(パフォーマンス検証:準備)
パーティション無しのテーブルとパーティション有りのテーブルを用意し、それぞれ同一の
レコードを挿入し、クエリ実行時間の検証を行った。
Bugs_P
※DATE_REPORTEDによる分割
P2010
P2009
P2008
Bugs
テーブル パーティション DATE_REPORTED レコード件数 容量(M)
2008/1/1 ~ 12/31 5,602,727
2009/1/1 ~ 12/31 5,587,420
2010/1/1 ~ 12/31 5,587,069
P2008 2008/1/1 ~ 12/31 5,602,727 488.0
P2009 2009/1/1 ~ 12/31 5,587,420 480.0
P2010 2010/1/1 ~ 12/31 5,587,069 480.0
BUGS_P
BUGS 無し 1,472.0
マスタ テキストの書式設定
パーティショニングありの場合
パーティショニングなしの場合
-12 -
8.5 解決策:①水平パーティショニング(パフォーマンス検証:検索)
2010年に発生したバグの対応時間の合計取得するSQLを実行し、所要時間を比較。
-- SQL:2010年に発生したバグの対応時間の合計取得
SELECT SUM(HOURS) FROM BUGS WHERE DATE_REPORTED BETWEEN
TO_DATE('2010-01-01', 'YYYY-MM-DD') AND TO_DATE('2010-12-31', 'YYYY-MM-DD');
-- 実行計画
SELECT STATEMENT Cost = 50199
SORT AGGREGATE
TABLE ACCESS FULL BUGS
-- 実行結果
1件選択されました(9796 msec.)
→ 約10秒
-- SQL:2010年に発生したバグの対応時間の合計取得
SELECT SUM(HOURS) FROM BUGS_P WHERE DATE_REPORTED BETWEEN
TO_DATE('2010-01-01', 'YYYY-MM-DD') AND TO_DATE('2010-12-31', 'YYYY-MM-DD');
-- 実行計画
SELECT STATEMENT Cost = 16759
SORT AGGREGATE
PARTITION RANGE SINGLE
TABLE ACCESS FULL BUGS_P
-- 実行結果
1件選択されました(3744 msec.)
→ 約4秒
パーティショニングありの方が、早い!
マスタ テキストの書式設定
パーティショニングありの場合
パーティショニングなしの場合
-13 -
8.5 解決策:①水平パーティショニング(パフォーマンス検証:削除)
2008年に発生したバグのレコードを削除するSQLを実行し、所要時間を比較。
-- SQL:2008年のレコードを削除
DELETE FROM BUGS WHERE DATE_REPORTED BETWEEN
TO_DATE('2008-01-01', 'YYYY-MM-DD') AND TO_DATE('2008-12-31', 'YYYY-MM-DD');
-- 実行計画
DELETE STATEMENT Cost = 50152
DELETE BUGS
TABLE ACCESS FULL BUGS
-- 実行結果
5602727行削除されました(516862 msec.)
→ 約8分
-- SQL:2008年のレコードを削除
ALTER TABLE BUGS_P DROP PARTITION P2008;
-- 実行結果
表が変更されました(296 msec.)
→ 1秒未満
※DELETEの場合は使用領域が解放されない。また、HWMも下がらない為、クエリの実行速度も改善されない。
-13 -
削除前 削除後
SEGMENT_NAME PARTITION_NAME MBYTES SEGMENT_NAME PARTITION_NAME MBYTES
BUGS 1472 BUGS 1472
BUGS_P P2008 488
BUGS_P P2009 480 BUGS_P P2009 480
BUGS_P P2010 480 BUGS_P P2010 480
パーティショニングありの方が、早い!
マスタ テキストの書式設定
パーティショニングありの場合
パーティショニングなしの場合
-14 -
8.5 解決策:①水平パーティショニング(パフォーマンス検証:全期間検索)
全期間のバグの対応時間の合計を取得するSQLを実行し、所要時間を比較。
-- SQL:全期間のバグの所要時間の合計を算出
SELECT SUM(HOURS) FROM BUGS;
-- 実行計画
SELECT STATEMENT Cost = 50241
SORT AGGREGATE
TABLE ACCESS FULL BUGS
-- 実行結果
1件選択されました(9079 msec.)
→ 約9秒
-- SQL:全期間のバグの所要時間の合計を算出
SELECT SUM(HOURS) FROM BUGS_P;
-- 実行計画
SELECT STATEMENT Cost = 50246
SORT AGGREGATE
PARTITION RANGE ALL
TABLE ACCESS FULL BUGS_P
-- 実行結果
1件選択されました(11326 msec.)
→ 約11秒
パーティション分割を行う場合、効果的なパーティションキーを設定する必要がある。
(①画面からの検索条件、②バッチでの集計条件、③データパージ単位等が候補となる)
パーティショニングありの方が、遅い!
マスタ テキストの書式設定
例1.サイズが大きい列を切り離す
*(アスタリスク)を用いた検索にてサイズの大きいデータの取得を回避する為、別テーブルに切り離す。
-15 -
8.5 解決策:②垂直パーティショニング
列でのテーブルを分割をする垂直パーティショニングは、列の一部のサイズが大きい場
合や、めったに使用されない場合にメリットがある。
例2.固定長と可変長の列を切り離す
MySQLのMyISAMストレージエンジンで検索を効率化する為、可変長の列を別テーブルに切り離す。
Products
product_id product_name ・・・ installer_image
P0001 product1 ・・・ ※バイナリデータ
P0002 product2 ・・・ ※バイナリデータ
Products
product_id product_name ・・・
P0001 product1 ・・・
P0002 product2 ・・・
Bugs
bug_id summary date_reported description resolution
P0001 固定長 固定長 可変長 可変長
Bugs
bug_id summary date_reported
P0001 固定長 固定長
bug_id description resolution
P0001 可変長 可変長
BugDescriptions
ProductInstallers
product_id installer_image
P0001 ※バイナリデータ
P0002 ※バイナリデータ
マスタ テキストの書式設定
従属テーブル導入の例
年別のカラムを持たせて強引に1レコードに収めず、プロジェクトと年にて1レコードになるようにする。
→ 新たな年をサポートするために列の定義を加える必要がなくなる。
-16 -
8.5 解決策:③従属テーブル
メタデータトリブル列(列の分割)の解決策は、従属テーブルの導入である。
-16 -
データにメタデータを増殖させないように気をつけましょう。
project_id bug_fixed_2008 bug_fixed_2009 bug_fixed_2010
PJT001 1024 2048 4096
PJT002 128 256 512
ProjectHistory
project_id year bug_fixed
PJT001 2008 1024
PJT001 2009 2048
PJT001 2010 4096
PJT002 2008 128
PJT002 2009 256
PJT002 2010 512
ProjectHistory
マスタ テキストの書式設定
-17 -
APPENDIX:テストデータトリブル
SELECT - INSERTを繰り返すことにより、2のn乗(nは繰り返し回数)のテストデータを作成する。
BEGIN
-- 【1.ベースとなるレコードを1件のみINSERT】
INSERT INTO BUGS
(BUG_ID, DATE_REPORTED, SUMMARY, DESCRIPTION, RESOLUTION, REPORTED_BY, ASSIGNED_TO, VERIFIED_BY, STATUS, PRIORITY, HOURS)
VALUES
(1, TO_DATE('2008/01/01', 'YYYY/MM/DD'), 'SUMMARY', 'DESCRIPTION', 'RESOLUTION', 1, 1, 1, 'Completed', 'Middle', 10) ;
COMMIT;
-- 【2.SELECT–INSERTを繰り返す】
-- 2^24 = 16,777,216件を生成
FOR i IN 1..24 LOOP
INSERT /*+ APPEND */ INTO
BUGS
SELECT
-- BUG_ID:INSERT完了件数 2^(i-1) + ROWNUMにより、1からの連番とする。
POWER(2, i - 1) + ROWNUM
-- DATE_REPORTED:2008/1/1 ~ 2010/12/31 に振り分ける
,TO_DATE(‘2008/01/01’, ‘YYYY/MM/DD’) + (MOD(POWER(2, i - 1) + ROWNUM, 1096))
,(省略)
FROM
BUGS
;
COMMIT;
END LOOP;
END;
/
PL/SQLが実行されました(63227 msec.)
--------------------------------------------------------------------------------

More Related Content

What's hot

MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
Yoshinori Matsunobu
 

What's hot (20)

なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
SQLアンチパターン読書会 第10章 サーティワンフレーバー
SQLアンチパターン読書会 第10章 サーティワンフレーバーSQLアンチパターン読書会 第10章 サーティワンフレーバー
SQLアンチパターン読書会 第10章 サーティワンフレーバー
 
インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 

Similar to Sqlアンチパターン(メタデータトリブル)

Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
Masayuki Ozawa
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
Insight Technology, Inc.
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
Masayuki Ozawa
 

Similar to Sqlアンチパターン(メタデータトリブル) (20)

[Japan Tech summit 2017] DAL 003
[Japan Tech summit 2017] DAL 003[Japan Tech summit 2017] DAL 003
[Japan Tech summit 2017] DAL 003
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
 
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料
 
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
 
Dat004 開発者に捧ぐ「sql server_2016_
Dat004 開発者に捧ぐ「sql server_2016_Dat004 開発者に捧ぐ「sql server_2016_
Dat004 開発者に捧ぐ「sql server_2016_
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)MySQL 5.7 Technical Update (日本語)
MySQL 5.7 Technical Update (日本語)
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
 
20220331_DSSA_MigrationToYugabyteDB
20220331_DSSA_MigrationToYugabyteDB20220331_DSSA_MigrationToYugabyteDB
20220331_DSSA_MigrationToYugabyteDB
 

Sqlアンチパターン(メタデータトリブル)