並行控制
並行性是指兩個交易同時使用相同資料的能力,交易隔離增加通常會使並行性降低。 這是因為交易隔離一般透過鎖定資料列來實作,鎖定的資料列越多,未受已鎖定資料列至少暫時鎖定而能完成的交易就越少。 雖然人們通常會接受並行性降低來換得維持資料完整性所必需的更高交易隔離等級,並行性降低仍會對使用資料指標並具備高度讀取/寫入活動的互動式應用程式造成問題。
例如,假設應用程式執行 SQL 陳述式 SELECT * FROM Orders。 該陳述式會呼叫 SQLFetchScroll 以在結果集周圍捲動,供使用者更新、刪除或插入訂單。 使用者更新、刪除或插入訂單後,應用程式會認可交易。
如果隔離等級為 [可重複讀取],則根據實作的方法,交易可能會鎖定 SQLFetchScroll 傳回的每個資料列。 如果隔離等級為 [可序列化],則交易可能會鎖定整個 [訂單] 資料表。 無論何者,只有在認可或復原時,交易才會釋放鎖定的對象。 因此,如果使用者花很多時間讀取訂單,但花很少時間更新、刪除或插入訂單,則交易很可能鎖定大量資料列,導致其他使用者無法使用。
即使資料指標處於唯讀狀態,且應用程式僅允許使用者讀取現有訂單,這個問題仍會發生。 若是如此,應用程式會在呼叫 SQLCloseCursor (在自動認可模式中) 或 SQLEndTran (在手動認可模式中) 時認可交易,並且釋放鎖定的對象。
此章節包含下列主題。