More Related Content
Similar to [INSIGHT OUT 2011] C12 50分で理解する SQL Serverでできることできないこと(uchiyama)
Similar to [INSIGHT OUT 2011] C12 50分で理解する SQL Serverでできることできないこと(uchiyama) (20)
More from Insight Technology, Inc.
More from Insight Technology, Inc. (20)
[INSIGHT OUT 2011] C12 50分で理解する SQL Serverでできることできないこと(uchiyama)
- 2. Agenda
• 1.SQL Serverってどうなの?
• 2.SQL Serverでできることできないこと
– 2-1.ロックの仕様の違いを理解する
– 2-2.オブジェクトの仕様の違いを理解する
– 2-3.パフォーマンス管理ツールを理解する
• 3.まとめ
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 2
- 3. 1. SQL Serverってどうなの?
Serverってどうなの?
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 3
- 4. SQL Serverのイメージ
• SQL Serverといえば・・・?
出荷本数シェァNo.1 GUIによる高いユーザビリティ
洗練されたBI機能 オールインワンによる低コスト
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 4
- 5. 現場の本音
これからOracle以外の
これから Oracle以外で提案すると
Oracle
DBを覚えるのが大変 失敗した時に「何でOracleに
失敗した時に「何で
しなかった」と言われそう
ロック待ちが多発
SQL Server
Serverができる⼈
するんじゃない?
って誰かいたっけ?
チューニングって
できないんでしょ?
この前導入した案件は
うまくいかなかった
らしい・・・
•アプリケーション開発者 •お客様に提案する⽴場の⼈
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 5
- 8. SQL Serverでできることできないこと
• 理解すべきポイント
設計フェーズ 開発フェーズ 運用フェーズ
•ロックの仕様の •オブジェクトの •パフォーマンス
違いを理解する 仕様の違いを 管理ツールを
理解する 理解する
フェーズが後になればなるほど手戻りも増大!
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 8
- 10. 設計フェーズ
ロックの仕様の違いを理解する 開発フェーズ
運用フェーズ
運用 フェーズ
ロックの仕様の違いを理解するポイント
•トランザクション分離レベル
•ロックエスカレーション
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 10
- 11. 設計フェーズ
ロックの仕様の違いを理解する 開発フェーズ
運用フェーズ
運用 フェーズ
• トランザクション分離レベル
– 同時に複数のトランザクションが実⾏した時の影響を定義
– Oracle、SQL Server共にread committed
– Read Committed…コミットしたデータが読める隔離レベル
Read Committed
Oracle
マルチバージョニング⽅式(オプティミスティック同時実⾏制御)
- 対象となるリソースに対して排他ロックを取得
- 排他ロック取得中でも更新前コミット済みデータが⾒れる
- 更新前データはUndo Segmentに保持
SQL Server
ロック⽅式(ペシミスティック同時実⾏制御)
- 対象となるリソースに対して排他ロックを取得
- 排他ロック取得中は他の処理を待機させる
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 11
- 12. 設計フェーズ
OracleとSQL Serverの動き方 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Oracle SQL Server
マルチバージョニング⽅式 ロック⽅式
トランザクションA開始 トランザクションA開始
トランザクションB開始 トランザクションB開始
UserA:400 UserA:400
UserB:200 UserB:200
Update 売上 Update 売上
Set 売上 = 売上 + 100 Set 売上 = 売上 + 100
Where ID = ‘UserA’; Where ID = ‘UserA’;
UserA:500 UserA:500
UserB:200 UserB:200
Select * From 売上; Select * From 売上;
UserA:500 トランザクションAが
ロック待ち
UserB:200 更新する前の値を参照
UserA:400
Commit; Commit;
UserB:200
Commit; Commit;
ロック待ち解放
UserA:500
UserB:200
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 12
- 13. 設計フェーズ
トランザクション分離レベルの変更 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• Oracleの仕様を前提に開発する場合、SQL Serverのトランザ
クション分離レベルをRead Committed Snapshotに変更する
SQL Server
Read Committed
Oracle
Read Committed ≒ Read Committed Snapshot
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 13
- 14. 設計フェーズ
Read Committed Snapshot時の動き 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Select⽂実⾏時
トランザクションA開始
トランザクションB開始
UserA:400 インデックスの
UserB:200
Update 売上 有無は関係無
Set 売上 = 売上 + 100
Where ID = ‘UserA’;
UserA:500
UserB:200
Select * From 売上;
更新前データは
tempDBに保持 トランザクションAが
更新する前の値を参照
UserA:400
Commit;
UserB:200
Commit;
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 14
- 15. 設計フェーズ
SQl ServerのRead Committed 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• 気を付けるべきポイント
– Update文やDelete文の実⾏には注意が必要!
⇒インデックスの有無で動きが大きく異なる
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 15
- 16. 設計フェーズ
OracleとSQL Serverの動き方 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
トランザクションA開始
トランザクションB開始
UserA:400
UsarB:200
Update 売上
Set 売上 = 売上 + 100
Where ID = ‘UserA’;
Select * From 売上;
IDにインデックス有 IDにインデックス無
トランザクションAが ロック待ち発生!
更新する前の値を参照
Commit; Commit;
UserA:400
UserB:200
UserA:500 UserA:500
UserB:200 UserB:200
ロック待ち解放
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 16
- 17. 設計フェーズ
SQL Serverのロック 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• SQL Serverではロックを考慮した設計した設計が必要
– ⾏を大量にロックするような処理はなるべく控える
– アプリケーションはできるだけショートトランザクションにする
– Update文やDelete文で指定する条件の項目にはインデックスは必須
– ロック待ちやデッドックの情報を取得しておく
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 17
- 18. 設計フェーズ
ロックの仕様の違いを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• ロックエスカレーション(SQL Serverのみ)
– 粒度の⼩さいロックを変換し粒度が大きいロックにする動き
– ロックエスカレーションが発生する条件
• メモリリソースのしきい値
– SQL Serverが使用するメモリの40%を超えた場合
• ロック数のしきい値
– 1SQLステートメントで5000以上のロックを取得する場合
– ロックエスカレーションを使用しないようにするには・・・
• Trace flag 1211で制御
• ※テーブル単位の場合
alter table [テーブル名] set ( LOCK_ESCALATION = DISABLE );
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 18
- 19. 設計フェーズ
Oracleのようにした場合・・・ 開発フェーズ
運用フェーズ
運用 フェーズ
トランザクション分離レベル ロックエスカレーション
Read Committed
Trace flag 1211に設定
Read Committed Snapshot (ロックエスカレーションOFF)
オーバーヘッドはどうなるか?
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 19
- 20. 設計フェーズ
オーバーヘッド 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• Read Committed Snapshotのオーバーヘッド
50 100 150
TPS
142 100%
Read Committed
100%
TPS
128 90% I/O req/sec@tempdb
Read Committed Snapshot
30 30,000%
I/O req/sec
30 @tempdb
10 20
• ロックエスカレーションさせない場合のリソースの変化
50 100 150
TPS
Read Committed 69 100%
with Lock Escalation 171 100%
TPS
136 198% Memory Size@Lock
Read Committed
With trace flag 1211 184 108%
Memory Size(MB)
100 150 200 @Lock
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 20
- 22. 設計フェーズ
オブジェクトの仕様の違いを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
オブジェクトの仕様を理解するポイント
シーケンス
パーティション
マテリアライズドビュー
PL/SQL
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 22
- 23. 設計フェーズ
オブジェクトの仕様の違いを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
オブジェクトの仕様を理解するポイント
シーケンス
パーティション
マテリアライズドビュー
PL/SQL
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 23
- 24. 設計フェーズ
SQL Server de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Sequence
・連続した数値を采番するオブジェクト
・複数のセッションからでもユニークな値を采番可能
・SQL Serverにはオブジェクトとして采番するものは存在しない
⇒采番する機能としてはIdentity属性が該当
Oracle:シーケンス SQL Server:Identity
・値を自動的に采番 ・○値を自動的に采番
・オブジェクトとして作成 ・×オブジェクトとして作成
・特定のカラムに依存しないで采番可能 ・×特定のカラムに依存しないで采番可能
・増分値や開始値が設定可能 ・○増分値や開始値が設定可能
・最大値が設定可能 ・△最大値はデータ型の最大値固定
・⽂字列のカラムにも指定可能 ・○⽂字列のカラムにも指定可能
・カラム属性として定義可能 ・○カラムの属性として定義可能
・※1つのテーブルに1つのみ作成可能
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 24
- 25. 設計フェーズ
SQL Server de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• SQL Serverでシーケンスを理解するポイント:
⇒SQL ServerのIdentityでOracleのシーケンスのような動
きがどこまでできるのか?
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 25
- 26. 設計フェーズ
SQL Server de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Oracle:シーケンス SQL Server:Identity
■シーケンス作成
CREATE SEQUENCE seq_1
START WITH 1
INCREMENT BY 1
MAXVALUE 1
MINVALUE 10000;
※テーブルの属性として定義する場合 ※テーブルの属性として定義する場合
CREATE TABLE table1 CREATE TABLE table1
(col1 NUMBER DEFAULT seq_1.NEXTVAL (col1 int IDENTITY(1,1),
col2 NUMBER); col2 int);
■番号取得⇒更新 ■番号取得⇒更新
DECLARE v_seq NUMBER; INSERT INTO table1 (col2)
SELECT seq_1.NEXTVAL INTO v_seq FROM DUAL; OUTPUT inserted.col1
VALUES(100) ;
INSERT INTO table1
VALUES (v_seq,100);
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 26
- 27. 設計フェーズ
SQL Server de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• ちなみに・・・
• SQL Server次期バージョンリリース
ポイント
シーケンスオブジェクトが追加
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 27
- 28. 設計フェーズ
SQL Server de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Oracle:シーケンス SQL Server:シーケンス
・値を自動的に采番 ・○値を自動的に采番
・オブジェクトとして作成 ・○オブジェクトとして作成
・特定のカラムに依存しないで采番可能 ・○特定のカラムに依存しないで采番可能
・増分値や開始値が設定可能 ・○増分値や開始値が設定可能
・最大値が設定可能 ・○最大値が設定可能
・⽂字列のカラムにも指定可能 ・○⽂字列のカラムにも指定可能
・カラム属性として定義可能 ・○カラム属性として定義可能
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 28
- 29. 設計フェーズ
SQL Server de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Oracle:シーケンス SQL Server:シーケンス
■シーケンス作成 ■シーケンス作成
CREATE SEQUENCE seq_1 CREATE SEQUENCE seq_1 AS INT
START WITH 1 MINVALUE 1
INCREMENT BY 1 MAXVALUE 100000
MAXVALUE 1 START WITH 1
MINVALUE 10000; INCREMENT BY 1;
※テーブルの属性として定義する場合 ※テーブルの属性として定義する場合
CREATE TABLE table1 CREATE TABLE table1
(col1 NUMBER DEFAULT seq_1.NEXTVAL (col1 NUMBER DEFAULT NEXT VALUE
col2 NUMBER); col2 NUMBER);
■番号取得⇒更新 ■番号取得⇒更新
DECLARE v_seq NUMBER;
SELECT seq_1.NEXTVAL INTO v_seq FROM DUAL; DECLARE @v_seq INT = NEXT VALUE FOR seq_1;
INSERT INTO table1 VALUES (v_seq,100); INSERT INTO table1 VALUES (@v_seq,100);
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 29
- 30. 設計フェーズ
オブジェクトの仕様の違いを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
オブジェクトの仕様を理解するポイント
シーケンス
パーティション
マテリアライズドビュー
PL/SQL
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 30
- 31. 設計フェーズ
SQL Server de パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Partitioning
・1 つのテーブルを一定の基準で分割する
- 複数パーティションに格納されたデータをパラレルに抽出可能
- データ抽出範囲(障害範囲)の極⼩化
・アプリケーションから透過的
Oracle:パーティション SQL Server:パーティション
・パーティションによる負荷分散 ・○パーティションによる負荷分散
・パーティション可能なオブジェクト ・○パーティション可能なオブジェクト
-テーブル、インデックス -テーブル、インデックス
・パーティション⽅式を選択可能 ・×パーティション⽅式を選択可能
-レンジ/リスト/ハッシュ △ -レンジ/リスト/ハッシュ
・パーティション毎にバックアップが可能 ・○パーティション毎にバックアップが可能
・障害範囲の極小化 ・○障害範囲の極小化
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 31
- 32. 設計フェーズ
SQL Server de パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• パーティションの種類
SQL Server
レンジパーティション でも使用可能 リストパーティション ハッシュパーティション
売上テーブル 売上テーブル 売上テーブル
date tokid Id
2008 TOKA 1
2008 2008年 TOKA 得意先A 103 Hash key 1
2008 TOKA 177
date tokid
2009 TOKB 2
2009 2009年 TOKB 得意先B 333 Hash key 2
2009 TOKB 457
date Tokid
2010 TOKC 8
2010 2010年 TOKC 得意先C 128 Hash key 3
2010 TOKC 134
date tokid
2011 TOKD 9
2011 2011年 TOKZ その他 113 Hash key 4
2011 TOKN 198
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 32
- 33. 設計フェーズ
SQL Server de パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• パーティションのポイント:
⇒パーティションのパフォーマンスは?
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 33
- 34. 設計フェーズ
SQL Server de パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• SQL Serverパーティション
– パーティションによる負荷分散
非partitioned partitioned ・1,000,000件データ
table table
・select count(*)
・非Partitioned table
… 7.8GB 8分14秒
Physical Physical Physical ・・・
Table Partition Partition ・Partitioned table
… 7.8GB 4分03秒
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 34
- 35. 設計フェーズ
SQL Server de パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• ちなみに・・・
– SQL Serverのデータ圧縮と組み合わせることで高速化可能
•パーティション分割のみ •パーティション分割+データ圧縮
・1,000,000件データ ・1,000,000件データ
・select count(*) ・select count(*)
・非Partitioned table ・非Compression table
… 7.8GB 8分14秒 … 7.8GB 8分14秒
・Partitioned table ・Compression table
… 7.8GB 4分03秒 … 20.8MB 1.3秒
シーケンスだけ
異なるほぼ同じデータを
ページ単位で圧縮
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 35
- 36. 設計フェーズ
オブジェクトの仕様の違いを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
オブジェクトの仕様を理解するポイント
シーケンス
パーティション
マテリアライズドビュー
PL/SQL
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 36
- 37. 設計フェーズ
SQL Server de マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Materialized View
・実体のあるビューのこと
・マテビューへの更新タイミングは任意に指定可能
・DBリンクと組み合わせることで、テーブルレプリケーションも可能
・SQL Serverではインデックス付きビューが最も近い機能
Oracle:マテリアライズドビュー SQL Server:インデックス付きビュー
・マテビューへデータを反映する ・×マテビューへデータを反映する
タイミングは任意に指定可能 タイミングは任意に指定可能
- 完全リフレッシュ × - 完全リフレッシュ
- 高速リフレッシュ(On Demand) × - 高速リフレッシュ(On Demand)
- 高速リフレッシュ(On Commit) × - 高速リフレッシュ(On Commit)
・クエリーリライト機能(クエリを自動 ・○クエリーリライト機能(クエリを自動
で書き換え) で書き換え)
・DBリンクと組み合わせてテーブル単位 ・× DBリンクと組み合わせてテーブル単位
のレプリケーション のレプリケーション
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 37
- 38. 設計フェーズ
SQL Server de マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• インデックス付きビュー
– 通常のビューを作成し、そのビューにインデックスを作成
– 作成するインデックスはクラスタインデックスのみ
• クラスタインデックス≒Oracleの索引構成表
– インデックス付きビュー作成例
– 基テーブル
Sales.SalesOrderHeader ( AdventureWorks DBを使用)
– ビューの作成
CREATE VIEW v_SalesOrderCount WITH SCHEMABINDING AS
SELECT SOH.CustomerID, COUNT_BIG(*) order_cnt
FROM Sales.SalesOrderHeader SOH
GROUP BY SOH.CustomerID;
– インデックス付きビューの作成
CREATE UNIQUE CLUSTERED INDEX v_SalesOrderCount_idx
ON v_SalesOrderCount(CustomerID)
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 38
- 39. 設計フェーズ
SQL Server de マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• SQL Server de マテビューのポイント:
⇒制約の多さ+パフォーマンス
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 39
- 40. 設計フェーズ
SQL Server de マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• インデックス付きビューの懸念点
– インデックス付きビューの制約
• インデックス付きビュー内で他のビューは参照不可
• 外部結合または⾃⼰結合は不可
• ORDER BY句は不可
• UNION、EXCEPT、INTERSECT句は不可
• DISTINCTオプションは不可
• AVG、MAX、MIN、STDEV、STDEVP、VAR、または VARP 集計関数は不可
• ⇒ただし、SUM関数やCOUNT_BIG関数と一緒に使うことは可能
– パフォーマンス懸念点
• 基テーブル更新時のオーバーヘッド
• トランザクションの同時実⾏性
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 40
- 41. 設計フェーズ
オブジェクトの仕様の違いを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
オブジェクトの仕様を理解するポイント
シーケンス
パーティション
マテリアライズドビュー
PL/SQL
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 41
- 42. 設計フェーズ
4.SQL Server de PL/SQL(拡張SQL) 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
PL/SQL(拡張SQL)
・SQLを拡張して手続き型言語として作成可能
・業務ロジックをデータベースに実装可能
・プロシージャやファンクション、トリガー等をストアドとして定義
・SQL ServerではTransact-SQLが該当
Oracle:PL/SQL SQL Server:Transact-SQL
・パッケージ、プロシージャ、 ・△パッケージ、プロシージャ、
ファンクション、トリガー ファンクション、トリガー
・変数、定数、CURSORの定義 ・○変数、定数、 CURSORの定義
・FOR LOOP、WHILE、IF⽂の使用 ・○FOR LOOP、WHILE、IF⽂の使用
・動的SQLの使用 ・○動的SQLの使用
・エラーハンドリング ・○エラーハンドリング
・ストアドとして定義 ・○ストアドとして定義
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 42
- 43. 設計フェーズ
SQL Server Migration Assistantとは 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• PL/SQLをより詳細に比較する為に・・・
– ツールを使用してPL/SQLを比較
• SQL Server Migration Assistant for Oracle(SSMA)
• SQL Server Migration Assistant for Oracle(SSMA)
– データベースのマイグレーションを分析、評価、支援するツール
– スキーマのマイグレーション
– PL/SQLをTransact-SQLにマイグレーション
– 一部の関数やシーケンスは、SSMAがエミューレート
– Microsoft社から無償で提供
– 最新は5.1。最新はDenaliにも対応(らしい)
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 43
- 44. 設計フェーズ
SSMAの画面 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Oracle:PL/SQL SQL Server:Transact-SQL
エラー一覧
(資料: http://blogs.msdn.com/b/ssma/archive/2010/11/30/video-creating-custom-ssma-report.aspx )
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 44
- 45. 設計フェーズ
SSMAの結果 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
SSMAによるオブジェクト変換率
オブジェクト変換率(PL/SQL以外) PL/SQL変換率
Object type Total With errors Converted Object type Total With errors Converted
index 2735 17 99% function 294 74 75%
schema 21 18 14% package 1958 1571 20%
sequence 177 0 100% packaged-function 9640 2899 70%
synonym 16 15 6% packaged-procedure 2429 1104 55%
table 7008 867 88% private-packaged-function 1239 466 62%
view 1100 269 76% private-packaged-procedure 1693 452 73%
Total 11057 1186 89% procedure 1145 586 49%
trigger 2744 1705 38%
Total 21142 8857 58%
タイプ型変換率
Object type Total With errors Converted
collection-type 6 6 0%
object-type 6 6 0%
packaged-type 2927 0 100%
private-packaged-type 561 0 100%
Total 3500 12 100%
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 45
- 46. 設計フェーズ
PL/SQL変換エラーTop.8 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
関数一覧(使用数別)
SQL文が不正 58168
関数が変換不可 13594
%type等型の変数の使用 6562
SQLCODE、SQLERRMの不正使用 4223
動的に作成されたクエリは手動変換が必要 2029
関数内ではグローバルカーソルを使用不可 1672
定義が不正な変数(%type等)の使用 979
ROWIDは使用不可 449
0 20000 40000 60000
使用数
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 46
- 47. 設計フェーズ
PL/SQL変換エラーTop.8 詳細 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Package/Procedure/Function/Trigger/View
Messages Cause Workaround 件数
SQL文の不正
- SELECT句のカラム VIEWのコンパイルエラー VIEWのエラー原因を特定
- INTO句で指定した変数 変数の宣言エラー(%type等) 変数の定義し直し 58168
- SQLの構文が不正 SQL Serverに未対応のSQL文 SQL文の書き換え
(Merge文)
関数が変換不可
⇒別ページ参照 ⇒別ページ参照 13594
(SUBSTRB関数やDBMS_OUTPUTなど)
%type等型の変数の使用 SQL Serverに%typeや%rowtypeが存在しない 変数の定義し直し 6562
EXCEPTION ブロック外でSQLCODE、SQLERRM
SQLCODE、SQLERRMの不正使用 仕様の確認、構文の修正 4223
を使用
動的SQL⾃体は実⾏可
動的に作成されたクエリは手動での変換が必要 変換後のSQL文を確認 2029
組み替えられたSQLは確認が必要
関数内ではグローバルカーソルを使用不可 グローバルカーソル 1672
定義が不正な変数(%type等)の使用 %typeで定義された変数を計算式等で使用している変数の定義を確認 979
ROWIDは使用不可 ROWIDはSQL Serverに存在せず 主キーを指定するよう変更 449
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 47
- 48. 設計フェーズ
関数エラー Top.8 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
関数一覧(使用数別)
SUBSTRB 12067
LENGTHB 530
MAX 168
UTL_FILE 166
INSTRB 128
DBMS_SQL 100
DBMS_OUTPUT 91
TO_MULTI_BYTE 85
0 5000 10000 15000
使用数
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 48
- 49. 設計フェーズ
関数エラー Top.8 詳細 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Function Cause 件数
SUBSTRB SUBSTRB関数に対応する関数がない 12067
LENGTHB LENGTHB関数に対応する関数がない 530
GROUP BY句が不正
MAX GROUP BYで関数を使用 168
不正なVIEWの使用
UTL_FILE ほとんどがUTL_FILE.FCLOSE_ALLが使用不可 166
INSTRB INSTRB関数に対応する関数がない 128
DBMS_SQL ほとんどがDBMS_SQL.COLUMN_VALUEが使用不可 100
DBMS_OUTPUT DBMS_OUTPUT.DISABLE/ENABLEが使用不可 91
TO_MULTI_BYTE INSTRB関数に対応する関数がない 85
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 49
- 50. 設計フェーズ
SSMAでの変換エラー Top.8 ~PL/SQL以外~ 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Table/Index/Synonym/Sequence
Messages Workaround LEVEL 件数
PUBLIC SYNONYMの使用 スキーマ毎にSYNONYMを作成 Warning 1797
NUMBER型の桁数未指定 仕様確認後桁数を定義 Warning 182
シーケンスが変換できない 2-2参照 Warning 173
一時テーブルの使用 セッション単位で一時テーブルを作成 Warning 64
マテリアライズドビューの使用 2-2参照 Error 49
RANGE PARTITIONの使用 SSMAでは自動変換されない Error 41
LIST PARTITIONの 使用 2-2参照 Error 30
INDEXのカラム数が多すぎ INDEXの見直し Error 30
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 50
- 52. 設計フェーズ
パフォーマンス管理ツールを理解する 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
パフォーマンス管理ツール
パフォーマンスデータコレクション
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 52
- 53. 設計フェーズ
パフォーマンス管理ツール 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• パフォーマンスデータコレクション
– SQL ServerやOSのパフォーマンス情報を収集
– 過去データも参照可能(SQL Server2008)
– OracleのEnterprise ManagerやStatspackと同等
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 53
- 54. 設計フェーズ
パフォーマンスデータコレクション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• クエリ統計
– 負荷の高いSQLTOP10の抽出が容易
•クエリ統計によるレポート画面
• 実⾏時間の⻑いSQL
• CPU使用時間の⻑いSQL
• 物理読み込みの多いSQL
• 論理書き込みの多いSQL
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 54
- 55. 設計フェーズ
パフォーマンスデータコレクション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• 抽出したSQLのチューニング
①.SQLの
統計データ表示
②.サンプリ
ングされた待
機情報表示
③.SQLの
実⾏計画表示
•Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 55
- 56. 3.まとめ
3.まとめ
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 56
- 57. まとめ
• データを格納するハコとしてはどのデータベー
スも同じ
⇒僅かな機能差や実績が製品の差になっている
• 違いを理解することで、適材適所にデータベー
スを配置することができる
更に・・・
・お客様に対して攻めの提案が可能
・設計・開発時の手戻り削減
・運用後の障害発生を回避
•Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 57