4/18,19は御忙しい中、パートナー様向けテクニカルセッションに御参加頂き誠にありがとうございました。

セッション中に御質問頂き、宿題にさせて頂いた件の回答を以下に記載します。

 

(御質問1) Performance Analyzerのパフォーマンスデータ取得ジョブ(DYNPERF_Capture_Stats) 

をお客様環境ではなく、本番環境からバックアップしたデータベースを、パートナー様環境にリストアした環境でも使用しても情報の取得可能か?

(回答) DYNPERF_Capture_Statsジョブでは、SQLサーバの動的管理ビュー(DMV)を使用して情報を取得しています。

このため、バックアップしたデータベースをリストアした環境では、DYNPERF_Capture_Statsジョブを実行しても必要な情報を取得できません。

また、SQLサーバサービスを再起動した直後も、キャッシュされている情報が無いため、同様にDYNPERF_Capture_Statsジョブを実行しても情報を取得できません。

 

(御質問2) ttsbegin,ttscommitが複数ネストしている場合、テーブルはどのタイミングで更新されるか?

(回答)最も外のttscommitが実行された後に全てのテーブルが更新されます。

CustTable ct;

SalesTable st;

;

ttsbegin;

while select forupdate ct where ct.AccountNum == "4000"

{

ct.Address = "NewAddress";

ct.update(); //locks are acquired here

 

ttsbegin;

while select forupdate st where st.SalesId == "00021_036"

{

st.CustAccount = "4002";

st.update();   //additional locks are acquired here

}

ttscommit;  //ここではSalesTableは更新されません。

 

print ct.Address;

}

ttscommit;  //一番外のttscommit実行後にCustTableSalesTable共に更新されます。