于 雷
(吉林廣播電視大學(xué),長(zhǎng)春 130022)
SQL數(shù)據(jù)庫(kù)中并發(fā)控制的方法初探
于 雷
(吉林廣播電視大學(xué),長(zhǎng)春 130022)
隨著信息科學(xué)技術(shù)的快速發(fā)展,信息化的普及和互聯(lián)網(wǎng)的發(fā)展變得越來(lái)越快,與此同時(shí),用戶(hù)量也在逐年增加,數(shù)據(jù)訪問(wèn)的并發(fā)性要求也越來(lái)越高,研究了SQL數(shù)據(jù)庫(kù)中的并發(fā)控制方法,結(jié)合一些經(jīng)典案例給出了解決方法。
SQL數(shù)據(jù)庫(kù);并發(fā)控制;控制方法
隨著信息化社會(huì)的發(fā)展,互聯(lián)網(wǎng)等信息技術(shù)飛速發(fā)展,用戶(hù)越來(lái)越多,對(duì)SQL數(shù)據(jù)庫(kù)中的并發(fā)性要求也越來(lái)越多。在日常生活中,每天對(duì)數(shù)據(jù)的訪問(wèn)是比較頻繁的,數(shù)據(jù)在使用時(shí)還要實(shí)現(xiàn)多用戶(hù)共享,這就要求數(shù)據(jù)庫(kù)中的并發(fā)控制方法和機(jī)制處于一個(gè)最好的狀態(tài),以保證數(shù)據(jù)的完整不流失,防止數(shù)據(jù)庫(kù)在運(yùn)行時(shí)出現(xiàn)錯(cuò)誤。數(shù)據(jù)庫(kù)中的并發(fā)控制機(jī)制是衡量數(shù)據(jù)庫(kù)某些性能的重要指標(biāo),筆者重點(diǎn)分析了數(shù)據(jù)庫(kù)中的并發(fā)控制方法。
1.1 并發(fā)的定義
并行性指的是兩個(gè)或兩個(gè)以上的事件或活動(dòng)在同一時(shí)刻發(fā)生。在多道程序環(huán)境下,并行性使多個(gè)程序同一時(shí)刻在不同CPU上同時(shí)執(zhí)行,并且也能考驗(yàn)系統(tǒng)同時(shí)操作和共享數(shù)據(jù)的能力。與此同時(shí),用戶(hù)進(jìn)程數(shù)量越多,說(shuō)明數(shù)據(jù)庫(kù)的并發(fā)性越好。并發(fā)控制是數(shù)據(jù)庫(kù)通過(guò)自己的管理方式保證用戶(hù)在訪問(wèn)數(shù)據(jù)的過(guò)程中,數(shù)據(jù)不會(huì)被輕易修改和添加,這樣一方面是為了保障數(shù)據(jù)的安全,另一方面是防止數(shù)據(jù)不一致的危險(xiǎn)發(fā)生。如果一味地放縱這些進(jìn)程運(yùn)行,就會(huì)給數(shù)據(jù)庫(kù)的安全性帶來(lái)極大的威脅。
1.2 事務(wù)概念
事務(wù),一般是指要做的或所做的事情。在計(jì)算機(jī)術(shù)語(yǔ)中是指訪問(wèn)并可能更新數(shù)據(jù)庫(kù)中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元。事務(wù)的組成是從事務(wù)開(kāi)始到結(jié)束的全部進(jìn)程,因此,事務(wù)訪問(wèn)數(shù)據(jù)的基本單元就是邏輯單位,且其操作序列也是固定的,但是卻可以實(shí)現(xiàn)特有的業(yè)務(wù)功能。事務(wù)有以下功能:第一,原子性。在事務(wù)的操作過(guò)程中,只會(huì)出現(xiàn)全部反映和全部不反映。第二,一致性。事務(wù)在執(zhí)行各項(xiàng)操作時(shí),使數(shù)據(jù)庫(kù)數(shù)據(jù)保持一致性。第三,隔離性。雖然事務(wù)的執(zhí)行是并發(fā)執(zhí)行,但是在數(shù)據(jù)庫(kù)的操作中是不會(huì)感覺(jué)出來(lái)其他事務(wù)也在同時(shí)執(zhí)行。第四,持久性。事務(wù)的各項(xiàng)操作在執(zhí)行以后,數(shù)據(jù)庫(kù)數(shù)據(jù)可以永久保存,這稱(chēng)為事務(wù)的持久性。
在數(shù)據(jù)庫(kù)不出現(xiàn)故障的情況下,所有的事務(wù)都能并發(fā)執(zhí)行和完成。在數(shù)據(jù)庫(kù)的運(yùn)行中,必須做到定時(shí)定期的更新,這樣才能保證事務(wù)的完整執(zhí)行和數(shù)據(jù)庫(kù)的完整運(yùn)行。
1.3 并發(fā)產(chǎn)生的問(wèn)題
在研究中發(fā)現(xiàn),并發(fā)會(huì)帶來(lái)許多問(wèn)題。第一,臟讀。一般來(lái)說(shuō),系統(tǒng)在讀取未提交的數(shù)據(jù)時(shí),第一個(gè)事務(wù)會(huì)對(duì)其進(jìn)行修改,第二個(gè)事務(wù)就會(huì)嘗試讀物數(shù)據(jù),這樣就會(huì)造成第二個(gè)事務(wù)讀取的數(shù)據(jù)與第一次讀取的數(shù)據(jù)不一樣。例如:我們?cè)趯?duì)文本進(jìn)行編輯時(shí),第一個(gè)人存儲(chǔ)原始數(shù)據(jù),一旦出現(xiàn)第一個(gè)人不滿(mǎn)意該文本進(jìn)行新一次編輯以后,第二個(gè)人存取的就是臟數(shù)據(jù)。第二,不可重復(fù)讀。在事務(wù)執(zhí)行的過(guò)程中,經(jīng)常會(huì)出現(xiàn)事務(wù)讀取同一條指令而結(jié)果不一樣,這是因?yàn)槭聞?wù)讀取數(shù)據(jù)以后,會(huì)有一項(xiàng)新的事務(wù)對(duì)該數(shù)據(jù)進(jìn)行修改,并且指令在被事務(wù)讀取以后不會(huì)再被二次讀取。第三,丟失更新。當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),只有最后一次更新有效,之前的更新將被覆蓋。每個(gè)事務(wù)都不知道其他事務(wù)的存在,最后的更新將重新由其他事務(wù)更新,這將導(dǎo)致數(shù)據(jù)丟失。第四,幻想讀。在一定范圍內(nèi)對(duì)事務(wù)進(jìn)行操作時(shí),而另一個(gè)事務(wù)對(duì)該范圍內(nèi)的行執(zhí)行不兼容操作時(shí),將會(huì)出現(xiàn)幻想讀。例如:在某一文本進(jìn)行刪除或插入操作時(shí),而這一編輯內(nèi)容不屬于該事務(wù)的讀取范圍,這就非常容易出現(xiàn)幻想讀問(wèn)題。
在數(shù)據(jù)庫(kù)的并發(fā)控制中,最主要的方式是封鎖,而我們?cè)谶M(jìn)行這項(xiàng)操作時(shí),事務(wù)的執(zhí)行過(guò)程還不能受其他無(wú)關(guān)事務(wù)的影響,否則就會(huì)出現(xiàn)數(shù)據(jù)的不一致。
在我們使用的SQL數(shù)據(jù)庫(kù)中,所有的并發(fā)控制方式都是鎖機(jī)制。所謂的鎖機(jī)制就是SQL數(shù)據(jù)庫(kù)在接受到相關(guān)的請(qǐng)求后,系統(tǒng)會(huì)根據(jù)請(qǐng)求的類(lèi)型添加鎖機(jī)制,這樣就能很好的防止系統(tǒng)內(nèi)資源的不兼容鎖,在最大程度上保持?jǐn)?shù)據(jù)的完整性和一致性。雖然這個(gè)機(jī)制能夠很好的保證數(shù)據(jù)庫(kù)的并發(fā)控制,但是該機(jī)制最大的缺陷是容易造成阻塞,尤其是在頻繁操作以后,特別容易出現(xiàn)此類(lèi)問(wèn)題,導(dǎo)致數(shù)據(jù)沖突,不能更好地保證數(shù)據(jù)的一致性。
2.1 鎖模式
SQL數(shù)據(jù)庫(kù)在給指令加鎖時(shí),會(huì)根據(jù)資源指令的類(lèi)型不同添加不同類(lèi)型的鎖,這些不同類(lèi)型的鎖就成為鎖模式。在SQL數(shù)據(jù)庫(kù)中主要有以下幾種鎖模式:
第一,共享鎖。共享鎖在學(xué)術(shù)界又被成為讀鎖,其主要的作用是防止事務(wù)在讀取數(shù)據(jù)時(shí)修改數(shù)據(jù),并能很好的實(shí)現(xiàn)資源的共享。第二,更新鎖。這類(lèi)鎖主要應(yīng)用于更新資源,同時(shí)可以防止資源在更新的過(guò)程中被事務(wù)修改,如果一旦出現(xiàn)死鎖,就需要使用另一項(xiàng)請(qǐng)求進(jìn)行資源的更新。第三,意向鎖。根據(jù)用戶(hù)資源級(jí)別的不同,數(shù)據(jù)庫(kù)在進(jìn)行資源的存儲(chǔ)時(shí),按資源的優(yōu)先級(jí)添加意向鎖。第四,架構(gòu)鎖。當(dāng)更新對(duì)象架構(gòu)時(shí)獲取架構(gòu)鎖。第五,鍵范圍鎖。用于保護(hù)某一范圍,用于可串行化隔離級(jí)別,以防止幻讀。
2.2 封鎖的粒度
在數(shù)據(jù)庫(kù)系統(tǒng)里面,封鎖對(duì)象的大小被稱(chēng)為封鎖粒度。在封鎖的時(shí),封鎖的對(duì)象既可以是邏輯單元,也可以是物理單元。我們最經(jīng)常使用的SQL數(shù)據(jù)庫(kù),封鎖的對(duì)象一般都是屬性值、關(guān)系和索引項(xiàng)等。其主要目的是為了保證數(shù)據(jù)庫(kù)中并發(fā)控制方法的運(yùn)行。
2.3 隔離級(jí)別
隔離級(jí)別是用于決定控制并發(fā)用戶(hù)讀寫(xiě)數(shù)據(jù)的操作。讀操作可以是任何檢索書(shū)庫(kù)的語(yǔ)句,默認(rèn)使用共享鎖,寫(xiě)操作是指任何對(duì)表做出修改的語(yǔ)句,需要使用排他鎖。對(duì)于操作獲得的鎖,以及鎖的持續(xù)時(shí)間來(lái)說(shuō),雖然不能控制寫(xiě)操作的處理方式,但可以控制讀操作的處理方式。當(dāng)然,作為對(duì)讀操作的行為進(jìn)行控制的一種結(jié)果,也將隱含地影響寫(xiě)操作的行為方式??梢栽跁?huì)話級(jí)別上用會(huì)話選項(xiàng)來(lái)設(shè)置隔離級(jí)別,也可以在查詢(xún)級(jí)別上用表提示(table hint)來(lái)設(shè)置隔離級(jí)別。
2.4 SQL數(shù)據(jù)庫(kù)中的新特性
在使用的SQL數(shù)據(jù)庫(kù)中,出現(xiàn)了一項(xiàng)版本控制的技術(shù),這項(xiàng)技術(shù)的出現(xiàn)使事務(wù)在對(duì)數(shù)據(jù)進(jìn)行修改之前可自行進(jìn)行備份,這就在很大程度上保證了數(shù)據(jù)庫(kù)中數(shù)據(jù)的完整性和一致性。
在信息科學(xué)技術(shù)快速發(fā)展的今天,在我們不斷的努力中,SQL數(shù)據(jù)庫(kù)中的并發(fā)控制研究已經(jīng)取得很大進(jìn)展,但是針對(duì)如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的并發(fā)控制和健康運(yùn)行仍有許多需要解決的問(wèn)題。本文就數(shù)據(jù)庫(kù)的有關(guān)概念進(jìn)行了分析,就數(shù)據(jù)庫(kù)的并發(fā)控制方法進(jìn)行了研究。
[1] 譚玲麗.?dāng)?shù)據(jù)庫(kù)SQL查詢(xún)優(yōu)化方法的研究[J].信息化建設(shè),2015,(11):115-116.
[2] 郝穎.ASP連接SQL Server數(shù)據(jù)庫(kù)的方法與技巧的研究[J].科教導(dǎo)刊(電子版),2015,(03):156.
[3] 朱瑪.基于InSQL數(shù)據(jù)庫(kù)的航天器遙測(cè)數(shù)據(jù)存儲(chǔ)方法研究[J].電子技術(shù)與軟件工程,2015,(17):194-195.
[4] 王睿.SQLServer2005中的數(shù)據(jù)定時(shí)統(tǒng)計(jì)方法研究[J].中國(guó)高新技術(shù)企業(yè),2016,(17):21-23.
[5] 奚寶玲.基于中等職業(yè)學(xué)?!禨QL Server數(shù)據(jù)庫(kù)》教學(xué)方法研究[J].電腦迷,2017,(04):65-66.
ThemethodofconcurrentcontrolinSQLdatabase
YU Lei
(Jilin Radio and Television University, Changchun 130022, China)
With the rapid development of information science and technology, the popularization of information technology and the development of the Internet have become faster and faster. At the same time, the number of users has also increased year by year, and the concurrency requirements of data access have become higher and higher. The concurrency control method in the SQL database was researched combining with some classic cases.
SQL database; Concurrency control; Control method
TP311.13
A
1674-8646(2017)20-0154-02
2017-08-16
于雷(1987-),男(滿(mǎn)族),助教,碩士研究生。