|
日記 |
2012年02月20日 21時21分 |
SqlServerの不思議 |
お客さんのところで SqlServer の 2005 を分散DBとして使っているのですが、ちょっと不審な動きをします
リンクサーバーと言う、ORACLE で言うデータベースリンクを作ってそれ経由でリモートデータベースにアクセスできるのは同じなんですが、それをローカールテーブルとJOINして読ませると、エラーになることがあるんです
「このトランザクションのリソース マネージャとして Microsoft 分散トランザクション コーディネータ (MS DTC) に登録できませんでした」
とか
「トランザクション (プロセス ID XX) が、ロック | 通信バッファ 個のリソースで他のプロセスとデッドロックして、このトランザクションがそのデッドロックの対象となりました。」
とか
どちらも、リモートテーブルとJOINしたSQLを実行したときになっています
最初は意味がわからなかったんですが、傾向を見ているとデータ量が多くなってくると出安くなりますし、統計の更新をすると動くようになったりするので、リモート側のタイムアウトではないかと思うのですが、設定の変更ができるのか定かではないです
で、経験則ですが SQLでリモート側のテーブルをサブクエリーにすると動くことが多いです
SELECT ・・・・・・
FROM ローカルテーブル名
LEFT JOIN リモートテーブル名
ON リモートテーブルの検索条件いろいろ
WHERE ローカルテーブルの検索条件いろいろ
とか書いてるところを
SELECT ・・・・・・
FROM ローカルテーブル名
LEFT JOIN ( SELECT * FROMリモートテーブル名 ) AS リモートテーブル名
ON リモートテーブルの検索条件いろいろ
WHERE ローカルテーブルの検索条件いろいろ
ってやると動いたりするんですよ!
また、分散パーティションビューの分散キーの種類が3つだったんで、分散のキーを指定したSQL展開してUNIONしたりとか
なんで?って感じです
でもって、上記のようにSQLを修正すると大概の場合検索が速くなるんですよね!
なので、タイムアウトじゃないかなぁと思っているんですが・・・
・リモートPCからSQLServerに繋ぐ
・SqlServer壊してしもた・・・
・SqlServerの不思議
・SQLServer のチューニング
・SQLSERVER のリストア
・NetFx3 ってなんだ?
・RDゲートウェイを入れてみました
・Windows上のApcheでASP.NETを動かす
・SQLServer に、大量データのインサート
・Windwos で mono
・Windows10 のシステムイメージの作成
・SQL Server 2017 RC2 評価期限切れ
|
|
目次へ戻る
|
|
|