Sybase 12 5鎖機制的一點理解

2021-04-12 14:18:21 字數 1431 閱讀 6479

對效能的理解

不同的人對效能有不同的理解,但是對下面所列的指標都可以達成共識:

查詢響應時間,比如乙個查詢花費了多長時間。

吞吐量,比如在單位時間內所執行的事務次數。

併發性,比如可以同時讓多少個程序執行操作。

併發使用者,比如可以支援多少個使用者併發操作。

產生效能瓶頸的因數很多,在各個層次上都有可能出現瓶頸:

1,體系結構。比如資料的物理分布不合理,網路不穩定的情況。

2,資料庫伺服器的配置。比如沒有設定表索引,導致大資料量的查詢時間很長。

3,相關資料驅動。比如沒有選擇合適的資料庫驅動,一般最好選擇官方所提供的資料驅動。

4,應用伺服器的配置。比如沒有進行資料庫連線池的設定。

5,應用程式的設計。比如sql,儲存過程很複雜,事務過大。

當然,效能優化中的優化實際是進行權衡考慮的過程。提公升效能的同時,是以其他的犧牲為代價的。

對鎖的一點理解

為什麼會出現鎖定:比如兩個併發程序,乙個要查詢,乙個要更新。對於類似的併發情況,就需要進行併發控制。那麼在資料庫中就通過鎖的機制來進行控制。

資料庫中的事務隔離級別主要有以下幾個級別:

0, 允許讀取未提交的資料。

1, 被鎖定的物件只能被持有鎖的程序訪問,而不允許其他讀操作者或者寫操作者。(這是資料庫預設的級別,一般使用排他鎖)。

2,     防止對資料的非重複讀取。當另乙個程序已經更新了其中乙個先前已被選擇的行的時候,乙個事務處理會對資料進行重複讀取,那麼重複讀取就會返回與第一次讀取的時候不同的資料。該級別包括級別1的限制,但是會導致衝突而且會增加死鎖發生的可能性。

3, 防止虛讀取。如果乙個事務處理在其他程序在結果集中當中插入或刪除行的時候重複讀取資料,那麼這個重複的讀取就會返回與第一次讀取不同數量的行。包括級別2的限制,但是會導致衝突而且會增加死鎖發生的可能性。

事務隔離級別越高,併發性越低。

對於資料庫,一般都有自動處理死鎖的能力,預設情況下沒隔500毫秒檢查一次死鎖,並進行相應的解鎖處理。

對於死鎖情況,可以通過動態配置sp_configure 「print deadlock information」 置為1或者是通過管理工具進行配置,列印出死鎖資訊進行分析。

一般來講,死鎖是不能避免的,但可以使死鎖的發生最小化,主要的手段如下:

1, 優化sql,優化儲存過程,加快執行速度有時候可以在死鎖發生之前釋放必要的資源。

2, 盡量按照相同的順序進行資料操作。

3, 避免使用保持鎖。

4, 將很長的事務分割成多個小的事務。

5, 確保表中有正確的索引。

6, 在吞吐量系統中,如果使用復**務器或者複製資料庫,就可以大大降低死鎖的發生。

7, 採用行級鎖可以大大降低死鎖的機率。

一點一滴學習Sybase

1,獲取當前時間的函式 select getdate 2,從資料字典中獲取資料庫物件 select from sysobjects 4,獲取 刪除 sybase連線,刪除正在連線的使用者.當查詢結束後連線並沒有關閉,建立表的時候出現lock問題,當把connection drop掉之後正常 sele...

悲觀鎖和樂觀鎖的一點學習

悲觀鎖和樂觀鎖的一點學習 鎖 locking 業務邏輯的實現過程中,往往需要保證資料訪問的排他性。鎖機制是在處理併發的時候所必須的乙個東西,當不存在併發的時候根本就不用考慮鎖機制 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更...

Sybase關於鎖 索引的知識點

只有在索引出現損壞的情況下才需要重建索引。正常沒有重建索引的建議 對索引的日常維護 1,對於行鎖表,如果有頻繁的增刪改,需要定期 垃圾空間。reorg 2,定期做統計資訊更新。update statistics 建立索引時會生成乙個索引鍵值的統計分布圖,執行計畫就是根據分布圖來估算給定索引值的記錄數...