導航:首頁 > 數據處理 > 臟數據是如何產生的

臟數據是如何產生的

發布時間:2023-03-24 12:51:36

① java 臟讀臟寫 怎麼產生的

產生臟數爛唯據,是弊歷棚因為多線程的原因,當某一個正租則在寫數據時,另一個線程讀取的數據是不準確的,需要進行同步處理。

② ThreadLocal本質及臟數據、內存泄漏問題

ThreadLocal作為WeakReference的referent,只要ThreadLocal對象引用被置為null,Entry的key(referent)就會在下一次YGC時被回收。在使用ThreadLocal的get()和set()時,會卜猛將失效的Entry(key == null)的value置為null,使value能夠被GC回收,避免內存泄漏。

ThreadLocal對象常作為私有靜態變數使用,其生命周期不會隨著線程結束而結束。

ThreadLocal本質屬性:線程間共享。

調用該init的有8個Thread構造器:

這8個構造器的inheritThreadLocals為true。

只有下面的構造器inheritThreadLocals為false:

在init中:

InheritableThreadLocal用來給子線程從父線程繼承thread-local值。

InheritableThreadLocal自動與線程的inheritableThreadLocals域關聯起來。
childValue()是個protected方法,其用在子線程創建時,用來從父線程 thread-local值時,可以設置初始值。

使用ThreadLocal和InheritableThreadLocal透傳上下文時,需要注意線程間切換、異常傳輸時的處理,避免在傳輸過程中因處理不當而導致的上下文丟失。

ThreadLocal對象本身由多線程共享。
而T類型的值各線程各不相同。

例如SimpleDateFormat是線程不安全的,可以放到ThreadLocal<DateFormat>中,然每個線程單獨有一份SimpleDateFormat對象。

主要問題是會產生臟數據和內存泄漏型漏橋。通常是在線程池的線程中使用ThreadLocal引發的,因為線程池有線程復用和內存常駐兩個特點。

run()中沒有顯式地調用remove()清理與線程相關的ThreadLocal信息,下一個線程也沒有set()設置初始值,則會產生臟數據。

ThreadLocal一般是static對象。因此寄希望於ThreadLocal對象失去引用後,觸發弱引用回收機制來回收Value是不現實的。
為了防止內存泄漏,每次用完ThreadLocal,必須要及時調用remove()方法搜鉛清理。

③ 簡述臟數據的產生原因及解決辦法

資料庫鎖的產生原因及解決辦法
資料庫和操作系統一樣,是一個多用戶使用的共享資源。當多個用戶並發地存取數據 時,在資料庫中悔歷就會產生多個事務同時存取同一數據的情況。若對並發操作不加控制就可能會讀取和存儲不正確的數據,破壞資料庫的一致性。加鎖是實現資料庫並 發控制的一個非常重要的技術。在實際應用中經常會遇到的與鎖相關的異常情況,當兩個事務需要一組有沖突的鎖,而不能將事務繼續下去的話,就會出現死鎖,嚴 重影響應用的正常執行。
在資料庫中有兩種基本的鎖類型:排它鎖碧晌搜(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當數據對象被加上排它鎖時,其他的事務不能對它讀取和修改。加了共享鎖的數據對象可以被其他事務讀取,但不能修改。資料庫利用這兩 種基本的鎖類型來對資料庫的事務進行並發控制。
死鎖的第一種情況
一個用戶A 訪問表A(鎖住了表A),然後又訪問表B;另一個用戶B 訪問表B(鎖住了表B),然後企圖訪問表A;這時用戶A由於用戶B已經鎖住表B,它必須等待用戶B釋放表B才能繼續,同樣用戶B要等用戶A釋放表A才能繼續,這就死鎖就產生了。
解決方法:
這種死鎖比較常見,是由於程序的BUG產生的,除了調整的程序的邏輯沒有其它的辦法。仔細分析程序的邏輯,對於資料庫的多表操作時,盡量按照相同的順序進 行處理,盡量避免同時鎖定兩個資源,如操作A和B兩張表時,總是按先A後B的順序處理, 必須同時鎖定兩個資源時,要保證在任何時刻都應該按照相同的順序來鎖定資源。
死鎖的第二種情況
用戶A查詢一條紀錄,然後修改該條紀錄;這時用戶B修改該條紀錄,這時用戶A的事務里鎖的性質由查詢的共享鎖企圖上升到獨占鎖,而用戶B里的獨占鎖由於A 有共享鎖存在所以必須等A釋放掉共享鎖,而A由於B的獨占鎖而無法上升的獨占鎖也就不可能釋放共享鎖,於是出現了死鎖。這種死鎖比較隱蔽,但在稍大點的項 目中經常發生。如在某項目中,頁面上的按鈕點擊後,沒有使按鈕立刻失效,使得用戶會多次快速點擊同一按鈕,這樣同一段代碼對資料庫同一條記錄進行多次操 作,很容易就出現這種死鎖的情況。
解決方法:
1、對於按鈕等控制項,點擊後使其立刻失效,不讓用戶重復點擊,避免對同時對同一條記錄操作。
2、使用樂觀鎖進行控制。樂觀鎖大多是基於數據版本(Version)記錄機制實現。即為數據增加一個版本標識,在基於資料庫表的版本解決方案中,一般是 通過為資料庫表增加一個「version」欄位來實現。讀取出數據時,將此版本號一同讀出,之後更新時,對此版本號加一。此時,將提交數據的版本數據與數 據庫表對應記錄的當前版本信息進行比對,如果提交的數據版本號大於資料庫表當前版本號,則予以更新,否則認為是過期數據。樂觀鎖機制避免了長事務中的數據 庫加鎖開銷(用戶A和用戶B操作過程中,都沒有對資料庫數據加鎖),大大提升了大並發量下的系統整體性能表現。Hibernate 在其數據訪問引擎中內置了樂觀鎖實現。需要注意的是,由於樂觀鎖機制是在我們的系統中實現,來自外部系統的用戶更新操作不受我們系統的控制,因此可能會造 成臟數據被更新到資料庫中。
3、使用悲觀鎖進行控制。悲觀鎖大多數情況下依靠資料庫的鎖機制實現,如Oracle的Select … for update語句,以保證操作最大程度的獨占性。但隨之而來的就是資料庫性能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受。如一個金融系統, 當某個操作員讀取用戶的數據,並在讀出的用戶數據的基礎上進行修改時(如更改用戶賬戶余額),如果採用悲觀鎖機制,也就意味著整個操作過程中(從操作員讀 出數據、開始修改直至提交修改結果的全過程,甚至還包括操作員中途去煮咖啡的時間),資料庫記錄始終處於加鎖狀態,可以想見,如果面對成百上千個並發,這 樣的情況將導致災難性的後果。所以,採用悲觀鎖進行控制時一定要考慮清楚。
死鎖的第三種情況
如果在事務中執行了一條不滿足條件的update語句,則執行全表掃描,把行級鎖上升為表級鎖,多個這樣的事務執行後,就很容易產生死鎖和阻塞。類似的情 況還有當表中的數據量非常龐大而索引建的過少或不合適的時候,使得經常發生全表掃描,最終應用系統會越來越慢,最終發生阻塞或死鎖。
解決方法:
SQL語句中不要使用太復雜的關謹核聯多表的查詢;使用「執行計劃」對SQL語句進行分析,對於有全表掃描的SQL語句,建立相應的索引進行優化。
5.小結
總體上來說,產生內存溢出與鎖表都是由於代碼寫的不好造成的,因此提高代碼的質量是最根本的解決辦法。有的人認為先把功能實現,有BUG時再在測試階段進 行修正,這種想法是錯誤的。正如一件產品的質量是在生產製造的過程中決定的,而不是質量檢測時決定的,軟體的質量在設計與編碼階段就已經決定了,測試只是 對軟體質量的一個驗證,因為測試不可能找出軟體中所有的BUG。

④ oracle中臟數據是什麼意思怎麼產生的

臟數據就是已經寫入到內存里,但是還沒有寫入到硬碟上的數據。一般當事物沒有提交的時候會產生,當事物提交以後,臟數據就會被寫進硬碟的數據塊,這時他就不叫臟數據了。

⑤ SQL中臟數據是啥意思

臟讀:一個用戶對一個資源做了修改,此時另外一個用戶正好讀取了這條被修改的記錄,然後,第一個用攜鄭戶春隱拍放棄修改,數據回到修改之前,這兩個不同的結果扒羨就是臟讀。

⑥ innodb 資料庫中的臟頁數據是怎麼產生的

由於等待和 Buffer Pool 的各種 latch 相關,而且 delete 操作本身會產生大量臟數據,那會不會跟刷臟頁操作相關呢?我們看下 SQL 被 kill 的量和刷臟頁的量之間的關系。
發現每秒刷臟頁的量和 SQL 被 kill 的量的曲線有點相近,看著刷臟頁的量挺大的,但是每秒 delete 的 TPS 又不是很高,為啥這么低的 TPS 會讓刷臟頁頻率抖動以及 SQL 執行變慢呢?曾經換過不同批次的機器,段漏和發現問題依舊,並沒有改善,說明並不是機器本身的問題。繼續瀏覽 buffer pool 相關的監控指標,像是發現新大陸一樣的發現了一個異常指標臟頁比例達到了快 90% !!!太嚇人了!!!為啥臟頁比例會達到 90% 呢,無非就是刷臟頁的速度跟不上產生的速度,要麼就是 IO 能力不行,要麼就是產生臟頁的速度過快,要麼就是內存池太小,導致 Buffer Pool 被臟頁占滿。那麼這個臟頁比例達到快 90% 會有什麼問題呢?
innodb_max_dirty_pages_pct_lwm 表示的是當臟頁比例達到該參數表示的低水位時候,刷臟線程就開始預刷臟來控制臟頁比例,避免達到innodb_max_dirty_pages_pct 。刷臟頁的最大 IO 能力是受 innodb_io_capacity 和 innodb_io_capacity_max 控制。生產上我們將 innodb_max_dirty_pages_pct_lwm 設置成了50當臟頁比例大於 innodb_max_dirty_pages_pct 時候,InnoDB 會進行非常激烈的刷臟頁操作,但是由於 DELETE 操作還是在進行,臟頁產生的速度還是非常快,刷臟頁的速度還是跟不上臟頁產生的速度。為了避免臟頁比例進一步擴大,更新將會被堵塞,從而導致 DELETE 執行變慢,直至被 KILL。發現問題之後,根據我們之前的假設,有三種解決方案:1. 調大 io_capacity ,但是由於主機是多實例部署,IO 佔用已經比較高,PASS。2. 降低臟頁產生速度,也就是調低 DELETE 速度,因為數據產生的速度很快,為了避免刪除跟不上插入的速度,也被 PASS。3. 調大 Buffer Pool,可以容納更多的臟頁。說干就干,得益於 MySQL 5.7 的在線調整 Buffer Pool,立馬將 Buffer Pool Size 擴了一倍,效果非常顯著。
臟頁比例立馬下降,被 kill 的 SQL 也下降了。平均 SQL rt 下降很多。

總結
得益於 MySQL 的開源,很多錯誤都握盯可以直接確認到對應的代碼,大致定位到問題發生的地方,給問題排查帶來了很多方便。同時對 MySQL buffer pool 的命中率以及臟頁比例也要多多關注,對 SQL 的性能搜念都有很大的影響。

⑦ 什麼是臟數據

臟數據(Dirty Read)是指源系統中的數據不在給定的范圍內或對於實際業務毫無意義,或是數據格侍宴式非法,以及在源系統中存在不規范的編碼和含糊的業務邏輯。

通俗的講,當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。

因為這個數據是還沒有提交的數據,那麼另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。

(7)臟數據是如何產生的擴展閱讀:

臟數據產生的影響:

1、丟失的修改:一個事物的更新覆蓋了另一個事物的更新。例如:事物A和B讀入同一數據並修渣廳改,B提交的結果破壞了A提交的結果,導致A的修改被丟失。

2、不可重復讀:一個事物兩次讀取同一個數據,兩次讀取的數據不一致。不可重復讀是指事物A讀取數據後,事物B執行更新操作,事務A 無法再現前一次讀取結果。

(1)事物A讀取某一數據後,事物B對其作了修改,當事物A再次讀取數據時,得到與前一次不同的值。

(2)事物A按一定的條件從資料庫中讀取了某些數據後,事物B刪除了其中部分記錄,當A再次以相同條件讀取時,發現某些記錄消失了。

3、臟讀:一個事物讀取了另一個事物未提交的數據。讀「臟」數據是指事物A修改某一數據,並將其寫回磁碟,事物B讀取同一數據後,A由於某種原因被撤銷,這時A已修改過的數據恢復原值,B讀到的數據就與資料庫中的數據不一致,則B讀到的數據為「臟」數據,即不正確的數據。

4、幻讀:一個事務按相同的查詢條件重新讀取以前檢索過的數據,卻發現其他事務插入了滿足其查詢條件的新數據,這種現象就稱為「老梁銀幻讀」。

⑧ 資料庫的數據臟讀是什麼意思,怎樣有效的避免數組臟讀,博客

臟讀就是指當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。因為這個數據是還沒有提交的數據,那麼另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。

1、如果都未更新你就讀取了,或者都更新完才讀取,這都不是臟讀,因為得到的是更新前的有效值,或完全更新後的值。

2、如果那個用戶更新一半你就讀取了,也就是說更新了A,正打算要更新B但尚未更新時,就讀取了,此時得到的就是臟數據。

避免臟讀的辦法就是採取事務,使得用戶正在更新時鎖定資料庫,阻止你讀取,直至全部完成才讓讀取。

(8)臟數據是如何產生的擴展閱讀:

在資料庫技術中,臟數據在臨時更新(臟讀)中產生。事務A更新了某個數據項X,但是由於某種原因,事務A出現了問題,於是要把A回滾。但是在回滾之前,另一個事務B讀取了數據項X的值(A更新後),A回滾了事務,數據項恢復了原值。事務B讀取的就是數據項X的就是一個「臨時」的值,就是臟數據。

閱讀全文

與臟數據是如何產生的相關的資料

熱點內容
武漢葵花葯店代理怎麼樣 瀏覽:135
人事代理是指哪些 瀏覽:445
紅軍為什麼不投入轉會市場 瀏覽:138
資料庫一頁多少k 瀏覽:568
華為換蘋果x手機怎麼轉移數據 瀏覽:353
張氏絕密技術有哪些 瀏覽:928
如何在電腦上安裝顯卡驅動程序 瀏覽:174
如何編apk程序 瀏覽:861
上匯眼鏡市場怎麼樣 瀏覽:710
夏門金龍技術部員工月工資多少 瀏覽:584
社保卡上信息與交費怎麼查 瀏覽:737
如何編寫串列口初始化程序 瀏覽:389
南昌菜市場在哪個位置擺攤 瀏覽:740
讀醫學類大專所學的專業技術如何 瀏覽:491
中國石頭花架批發市場在哪個地方 瀏覽:646
目前市場上什麼狗最便宜 瀏覽:174
行動預設數據是什麼 瀏覽:864
地球科學與技術專業是什麼 瀏覽:544
查詢百萬條數據會出現什麼情況 瀏覽:462
中國電信政企部和市場部哪個好 瀏覽:145