Thread View: fj.lang.visualbasic
2 messages
2 total messages
Started by H.Shima
Thu, 18 Dec 1997 00:00
Selectによるdeadlockの解決方法を教えて下さい
Author: H.Shima
Date: Thu, 18 Dec 1997 00:00
Date: Thu, 18 Dec 1997 00:00
80 lines
2922 bytes
2922 bytes
始めて、投稿させて頂きます。 現在、SQL Server + VB4によるシステムを構築中なのですが、 誰か分かる方教えて下さい。 OpenResultsetメソッドを使用してSELECTクエリーを発行しているのですが、 結果が返ってくる迄、SELECTで使用しているテーブルに対して、 他のプロセスから更新を行うと、SELECT側がブロックしてしまって、 SELECTが完了するまで更新できません。 (複雑なSELECT文で実行時間が掛かると、deadlockがしばしば発生する) PG中はロックしないようにReadOnlyに設定しているのですが・・・・ なにか間違えているのでしょうか教えて下さい。 現在の環境は下記の通りです。 サーバ環境 EXPRESS 5800/160Pro OS: Windows NT Server 4.0 SP2 DBMS: MS SQL Server 6.5 SP2 クライアント環境 RsⅡ266 OS: Windows 95 OSR2 開発環境 言語:Microsoft Visual Basic 4.0 Update2 DBとの接続は、RDOによる信頼関係を使用しています。 *ブロックするPGのロジック ------------------------------- Public gloDbConnect As rdoConnection Private Sub XXXXXX() Dim SQL As String Dim objResultset As rdoResultset Set gloDbConnect = rdoEngine.rdoEnvironments(0).OpenConnection( _ dsname:="IKKSQLSOURCE", _ Prompt:=rdDriveNoPrompt, _ ReadOnly:=False, _ Connect:="DSN=IKKSQLSOURCE;") gloDbConnect.QueryTimeout = 0 SQL = "SELECT * FROM Tablename WHERE ~" Set objResultset = gloDbConnect.OpenResultset( _ Name:=SQL, _ Type:=rdOpenForwardOnly, _ LockType:=rdConcurReadOnly) %%%%%%%%% End Sub ---------------------------- *ブロックされるPGのロジック ---------------------------- Public gloDbConnect As rdoConnection Private Sub XXXXXX() Set gloDbConnect = rdoEngine.rdoEnvironments(0).OpenConnection( _ dsname:="IKKSQLSOURCE", _ Prompt:=rdDriveNoPrompt, _ ReadOnly:=False, _ Connect:="DSN=IKKSQLSOURCE;") gloDbConnect.QueryTimeout = 0 gloDbConnect.Execute "INSERT TableName VALUES(1,2,3,4)" %%%%%%%%% End Sub ---------------------------- ちなみに ブロックする側が発行するSELECT文を取り出してISQL/Wから実行し、 ブロックされる側のPGを動かした場合、全く問題なく動作します。 ************************ (株)ホクタテ 島 E-Mail: shima@tko.fitweb.or.jp ************************
Re: Selectによるdeadlockの解決方法を教えて下さい
Author: H.Shima
Date: Mon, 29 Dec 1997 00:00
Date: Mon, 29 Dec 1997 00:00
26 lines
1757 bytes
1757 bytes
先日 SQL Server + VB4 のシステムにてテーブルブロックが発生するという問題で どうしたら解決できるか質問していたのですが、解決策が分かりました。 ---------- > OpenResultsetメソッドを使用してSELECTクエリーを発行しているのですが、 > 結果が返ってくる迄、SELECTで使用しているテーブルに対して、 > 他のプロセスから更新を行うと、SELECT側がブロックしてしまって、 > SELECTが完了するまで更新できません。 > (複雑なSELECT文で実行時間が掛かると、deadlockがしばしば発生する) > PG中はロックしないようにReadOnlyに設定しているのですが・・・・ > なにか間違えているのでしょうか教えて下さい。 ---------- よくよく調査するとVIEWを使用しているクエリーのみ ブロックが発生していたことが分かりました。 そこでVIEW中の"FROM Table名"の後に"(NOLOCK)"と入れたところテーブルブロックが発生しなくなりまし た。大変お騒がせしました。 また、解決方法の発見に尽力くださった皆様に深く感謝いたします。 ************************ (株)ホクタテ 島 E-Mail: shima@tko.fitweb.or.jp ************************
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads