More Related Content
PDF
[B24] Oracle から SQL Server システム移行の勘所 by Norio Nakamura PDF
45分で理解する SQL Serverでできることできないこと PDF
MySQL 5.7 Technical Update (日本語) PDF
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料 PDF
C13 SQL Server2012知られざるTips集 by 平山理 PDF
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama PDF
States of Dolphin - MySQL最新技術情報2013秋 - PDF
What's hot
PDF
20150131 ChugokuDB-Shimane-MySQL PDF
Corruption And Revive - db tech showcase 2013 特濃JPOUG PDF
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い PDF
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0) PDF
パフォーマンスタブ見れないんですけど!! 株式会社コーソル 河野 敏彦 PDF
Oracle SQL Developerを使い倒そう! 株式会社コーソル 守田 典男 PDF
第九回中国地方DB勉強会 in 米子 MySQL 5.7+ PDF
PDF
Standard Edition 2でも使えるOracle Database 12c Release 2オススメ新機能 PDF
PPT
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~ PDF
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介 PDF
PDF
Oracle Database Cloud Service を使ってみよう! 株式会社コーソル 守田 典男 PDF
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか PDF
MySQL57 Update@OSC Fukuoka 20151003 PDF
DBP-008_SQL Server on Azure VM 最新情報とベスト プラクティス PDF
PPTX
[db tech showcase 2017 Tokyo] A23 - MySQLのセキュリティ関連機能の現状 PDF
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング Viewers also liked
PDF
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ PPTX
PDF
SQL Server運用実践 - 3年間80台の運用経験から20の教訓 PPTX
Sql server これだけはやっておこう 最終版 PDF
STelligence Savvius Thai Datasheet KEY
FRT Vol. 5 クラウド時代の企業アプリケーションとマーケティング PDF
Global Knowledge Training Courses & Promotion 2015-Sep PPT
Trabalhando com o Moodle e a Comunidade PPT
Caching Data For Performance PPT
MoodleMoot Brasil 2011 - O Moodle na UFSC (Infraestrutura de TI) PDF
ThaiCert Phishing and Malicious Code Infographic 2015 PDF
OSSV [Open System SnapVault] PDF
SQL Server 現状診断サービス ご紹介資料 PDF
SQL Server 簡易診断サービス ご紹介資料 PPT
Driver development – memory management PDF
Board support package_on_linux PPTX
PDF
Linux for embedded_systems PPT
Kernel module programming PDF
Similar to [INSIGHT OUT 2011] C12 50分で理解する SQL Serverでできることできないこと(uchiyama)
PDF
PDF
PDF
PDF
PDF
20121130 solaris-11.1-day.ohsone PDF
VSUG Day 2010 Summer Tokyo - keynote PDF
20120302 第4回iocj info_scoop_sfdc連携紹介 PDF
RWC2012(ワコムアイティ&テクノプロジェクト) PDF
PDF
PDF
PDF
PDF
New Integration "X" 新インテグレーションソリューション PDF
PPTX
PDF
これからの「アジャイル」の話をしよう 2012 ――今を生き延びるための開発手法とエンジニアに求められるスキル PDF
【17-C-1】 Big Data を扱うアーキテクチャーの原則 PDF
PDF
PDF
More from Insight Technology, Inc.
PDF
PDF
Docker and the Oracle Database PDF
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~ PDF
PDF
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン PDF
PDF
PDF
PDF
SQL Server エンジニアのためのコンテナ入門 PDF
Lunch & Learn, AWS NoSQL Services PDF
db tech showcase2019オープニングセッション @ 森田 俊哉 PDF
db tech showcase2019 オープニングセッション @ 石川 雅也 PDF
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー PPTX
難しいアプリケーション移行、手軽に試してみませんか? PPTX
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介 PPTX
PPTX
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』... PDF
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。 PPTX
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ... PPTX
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018] [INSIGHT OUT 2011] C12 50分で理解する SQL Serverでできることできないこと(uchiyama)
- 1.
- 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.
- 4.
SQL Serverのイメージ
• SQLServerといえば・・・?
出荷本数シェァ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
- 6.
- 7.
- 8.
SQL Serverでできることできないこと
• 理解すべきポイント
設計フェーズ 開発フェーズ 運用フェーズ
•ロックの仕様の •オブジェクトの •パフォーマンス
違いを理解する 仕様の違いを 管理ツールを
理解する 理解する
フェーズが後になればなるほど手戻りも増大!
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 8
- 9.
- 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 CommittedSnapshot時の動き 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
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.
設計フェーズ
SQlServerの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
- 21.
- 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.
設計フェーズ
SQLServer de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Sequence
・連続した数値を采番するオブジェクト
・複数のセッションからでもユニークな値を采番可能
・SQL Serverにはオブジェクトとして采番するものは存在しない
⇒采番する機能としてはIdentity属性が該当
Oracle:シーケンス SQL Server:Identity
・値を自動的に采番 ・○値を自動的に采番
・オブジェクトとして作成 ・×オブジェクトとして作成
・特定のカラムに依存しないで采番可能 ・×特定のカラムに依存しないで采番可能
・増分値や開始値が設定可能 ・○増分値や開始値が設定可能
・最大値が設定可能 ・△最大値はデータ型の最大値固定
・⽂字列のカラムにも指定可能 ・○⽂字列のカラムにも指定可能
・カラム属性として定義可能 ・○カラムの属性として定義可能
・※1つのテーブルに1つのみ作成可能
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 24
- 25.
設計フェーズ
SQLServer 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.
設計フェーズ
SQLServer de シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• ちなみに・・・
• SQL Server次期バージョンリリース
ポイント
シーケンスオブジェクトが追加
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 27
- 28.
設計フェーズ
SQL Serverde シーケンス 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
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.
設計フェーズ
SQLServer de パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
Partitioning
・1 つのテーブルを一定の基準で分割する
- 複数パーティションに格納されたデータをパラレルに抽出可能
- データ抽出範囲(障害範囲)の極⼩化
・アプリケーションから透過的
Oracle:パーティション SQL Server:パーティション
・パーティションによる負荷分散 ・○パーティションによる負荷分散
・パーティション可能なオブジェクト ・○パーティション可能なオブジェクト
-テーブル、インデックス -テーブル、インデックス
・パーティション⽅式を選択可能 ・×パーティション⽅式を選択可能
-レンジ/リスト/ハッシュ △ -レンジ/リスト/ハッシュ
・パーティション毎にバックアップが可能 ・○パーティション毎にバックアップが可能
・障害範囲の極小化 ・○障害範囲の極小化
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 31
- 32.
設計フェーズ
SQLServer 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 Serverde パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• パーティションのポイント:
⇒パーティションのパフォーマンスは?
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 33
- 34.
設計フェーズ
SQLServer 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 Serverde パーティション 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• ちなみに・・・
– 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.
設計フェーズ
SQLServer 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 Serverde マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• インデックス付きビュー
– 通常のビューを作成し、そのビューにインデックスを作成
– 作成するインデックスはクラスタインデックスのみ
• クラスタインデックス≒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.
設計フェーズ
SQLServer de マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• SQL Server de マテビューのポイント:
⇒制約の多さ+パフォーマンス
Copyright © 2011 Insight Technology, Inc. All Rights Reserved. 39
- 40.
設計フェーズ
SQL Serverde マテビュー 開発フェーズ
開発 フェーズ
運用フェーズ
運用 フェーズ
• インデックス付きビューの懸念点
– インデックス付きビューの制約
• インデックス付きビュー内で他のビューは参照不可
• 外部結合または⾃⼰結合は不可
• 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.SQLServer 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
- 51.
- 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
- 58.
- 59.