當前位置:首頁 » 數據倉庫 » 資料庫連續訪問
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫連續訪問

發布時間: 2022-12-31 00:18:09

資料庫如何訪問

關於如果訪問的問題分3步吧
1.贈送方應該告訴你放置你資料庫的伺服器地址,以及資料庫的用戶名和密碼,不過一般用戶名和密碼是你提供給贈送方,他們幫你設置好的。
2.你本地裝有MYsql和MSSQL資料庫。
3.對本地資料庫進行訪問遠程資料庫的設置。
最後一步要自己具體操作的。

一般來說資料庫的伺服器和網站的伺服器是分開的,你說的自行建立文件夾當作資料庫我不太明白你到底是什麼意思,如果你用的是access資料庫,就可以方便地在本地建立。

❷ 資料庫用戶被鎖連續訪問幾千次有什麼影響

最常見的是多個用戶同時操縱一個表的時候沖突,一個想改數據,一個想讀刪數據,當然會有沖突,這是有鎖的機制來約束並發訪問數據,就是當一個用戶對一個表的某個欄位進行操作時鎖定數據,直到操作完成鎖才接觸,然後下一個用戶來操作數據。

❸ Oracle:如何以事物的方式對資料庫進行訪問

兩次連續成功的COMMIT或ROLLBACK之間的操作,稱為一個事務。在一個事務內,數據的修改一起提交或撤銷,如果發生故障或系統錯誤,整個事務也會自動撤銷。 一 事務的概念 事務是由相關操作構成的一個完整的操作單元。兩次連續成功的COMMIT或ROLLBACK之間的操作,稱為一個事務。在一個事務內,數據的修改一起提交或撤銷,如果發生故障或系統錯誤,整個事務也會自動撤銷。 oracle的數據語音分為數據定義語言(DDL)、數據控制語言(DCL)和數據操縱語言(DML)。其中的DML語言會生成事務,其他兩種語言只要執行,事務就會結束。 簡單的說DML語言可以建立事務,DDL和DCL不能建立事務。 DML語言包括幾個命令,例如 select insert delete update等等,這些命令執行後,當前用戶的顯示信息是更改了,但是其他人訪問你改的表的時候數據並沒有更改,需要使用commit確認後才能更改。如果當前用戶在沒有執行commit前反悔操作了,那使用rollback命令可以回退到執行操縱語句之前,但是如果已經執行了commit語句是無法回退的。 比如,我們去銀行轉賬,操作可以分為下面兩個環節: (1) 從第一個賬戶劃出款項。 (2) 將款項存入第二個賬戶。 在這個過程中,兩個環節是關聯的。第一個賬戶劃出款項必須保證正確的存入第二個賬戶,如果第二個環節沒有完成,整個的過程都應該取消,否則就會發生丟失款項的問題。整個交易過程,可以看作是一個事物,成功則全部成功,失敗則需要全部撤消,這樣可以避免當操作的中間環節出現問題時,產生數據不一致的問題。 一個事務是由一個可執行的SQL語句開始,一個可執行SQL語句產生對實例的調用。在事務開始時,被賦給一個可用回滾段,記錄該事務的回滾項。一個事務以下列任何一個出現而結束。資料庫事務是一個邏輯上的劃分,有的時候並不是很明顯,它可以是一個操作步驟,也可以是多個操作步驟。關鍵字: 分層查詢 函數 觸發器語法 Oracle物化視圖 跟蹤sql語句 內容摘要:事務是由相關操作構成的一個完整的操作單元。兩次連續成功的COMMIT或ROLLBACK之間的操作,稱為一個事務。在一個事務內,數據的修改一起提交或撤銷,如果發生故障或系統錯誤,整個事務也會自動撤銷。 我們可以這樣理解資料庫事物:對資料庫所做的一系列修改,在修改過程中,暫時不寫入資料庫,而是緩存起來,用戶在自己的終端可以預覽變化,直到全部修改完成,並經過檢查確認無誤後,一次性提交並寫入資料庫,在提交之前,必要的話所做的修改都可以取消。提交之後,就不能撤銷,提交成功後其他用戶才可以通過查詢瀏覽數據的變化。 以事務的方式對資料庫進行訪問,有如下的優點: * 把邏輯相關的操作分成了一個組。 * 在數據永久改變前,可以預覽數據變化。 * 能夠保證數據的讀一致性。 二 資料庫事務的應用 資料庫事務處理可分為隱式和顯式兩種。顯式事務操作通過命令實現,隱式事務由系統自動完成提交或撤銷(回退)工作,無需用戶的干預。 隱式提交的情況包括:當用戶正常退出SQL*Plus或執行CREATE、DROP、GRANT、REVOKE等命令時會發生事務的自動提交。 還有一種情況,如果把系統的環境變數AUTOCOMMIT設置為ON(默認狀態為OFF),則每當執行一條INSERT、DELETE或UPDATE命令對數據進行修改後,就會馬上自動提交。設置命令格式如下: SET AUTOCOMMIT ON/OFF 隱式回退的情況包括:當異常結束SQL*Plus或系統故障發生時,會發生事務的自動回退。 顯式事務處理的資料庫事務操作語句有3條,分別是COMMIT,ROLLBACK,SAVEPOINT語句。 COMMIT是資料庫事物提交,將變化寫入資料庫。此操作把多個步驟對資料庫的修改,一次性地永久寫入資料庫,代表資料庫事務的成功執行。ROLLBACK是資料庫事務回退,撤銷對資料庫的修改。操作在發生問題時,把對資料庫已經作出的修改撤消,回退到修改前的狀態。在操作過程中,一旦發生問題,如果還沒有提交操作,則隨時可以使用ROLLBACK來撤消前面的操作。SAVEPOINT則用於在事務中間建立一些保存點,ROLLBACK可以使操作回退到這些點撤上邊,而不必撤銷全部的操作。一旦COMMIT完成,就不能用ROLLBACK來取消已經提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必須重新執行相關操作語句。 如何開始一個新的事務呢?一般情況下,開始一個會話(即連接資料庫),執行第一條SQL語句將開始一個新的事務,或執行COMMIT提交或ROLLBACK撤銷事務,也標志新的事務的開始。另外,執行DDL(如CREATE)或DCL命令也將自動提交前一個事務而開始一個新的事務。 數據在修改的時候會對記錄進行鎖定,其他會話不能對鎖定的記錄進行修改或加鎖,只有當前會話提交或撤銷後,記錄的鎖定才會釋放。 例如修改雇員SCOTT的工資,工資在原有基礎上增加1000: UPDATE emp SET sal=sal+1000 WHERE empno=7788; 執行結果: 已更新 1 行。 顯示修改後SCOTT的工資: SELECT ename,sal FROM emp WHERE empno=7788; 執行結果: ENAME SAL SCOTT 4000 經查看修改結果正確,提交所做的修改: COMMIT; 執行結果: 提交完成。 在執行COMMIT後,工資的修改被永久寫入資料庫。本訓練的第1步,先使用COMMIT命令提交原來的操作,同時標志一個新的事務的開始。注意:在事務執行過程中,隨時可以預覽數據的變化。

❹ 磁碟讀寫和資料庫讀寫哪個效率更高

假定在程序效率和關鍵過程相當且不計入緩存等措施的條件下,讀寫任何類型的數據都沒有直接操作文件來的快,不論MSYQL過程如何,最後都要到磁碟上去讀這個「文件」(記錄存儲區等效),所以當然這一切的前提是只讀 內容,無關任何排序或查找操作。

動態網站一般都是用資料庫來存儲信息,如果信息的及時性要求不高 可以加入緩存來減少頻繁讀寫資料庫。

兩種方式一般都支持,但是繞過操作系統直接操作磁碟的性能較高,而且安全性也較高,資料庫系中的磁碟性能一直都是瓶頸,大型資料庫一般基於unix
系統,當然win下也有,不常用應為win的不可靠性,unix下,用的是裸設備raw設備,就是沒有加工過的設備(unix下的磁碟分區屬於特殊設備,
以文件形式統一管理),由dbms直接管理,不通過操作系統,效率很高,可靠性也高,因為磁碟,cache和內存都是自己管理的,大型資料庫系統
db2,oracal,informix(不太流行了),mssql算不上大型資料庫系統。

1、直接讀文件相比資料庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。

2、一次讀取的內容越大,直接讀文件的優勢會越明
顯(讀文件時間都是小幅增長,這跟文件存儲的連續性和簇大小等有關系),這個結果恰恰跟書生預料的相反,說明MYSQL對更大文件讀取可能又附加了某些操
作(兩次時間增長了近30%),如果只是單純的賦值轉換應該是差異偏小才對。

3、寫文件和INSERT幾乎不用測試就可以推測出,資料庫效率只會更差。
4、很小的配置文件如果不需要使用到資料庫特性,更加適合放到獨立文件里存取,無需單獨創建數據表或記錄,很大的文件比如圖片、音樂等採用文件存儲更為方便,只把路徑或縮略圖等索引信息放到資料庫里更合理一些。

5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數時間會少3秒左右。
6、fetch_row和fetch_object應該是從fetch_array轉換而來的,書生沒看過PHP的源碼,單從執行上就可以說明fetch_array效率更高,這跟網上的說法似乎相反。

磁碟讀寫與資料庫的關系:

一 磁碟物理結構
(1) 碟片:硬碟的盤體由多個碟片疊在一起構成。

在硬碟出廠時,由硬碟生產商完成了低級格式化(物理格式化),作用是將空白的碟片(Platter)劃分為一個個同圓心、不同半徑的磁軌
(Track),還將磁軌劃分為若干個扇區(Sector),每個扇區可存儲128×2的N次方(N=0.1.2.3)位元組信息,默認每個扇區的大小為
512位元組。通常使用者無需再進行低級格式化操作。

(2) 磁頭:每張碟片的正反兩面各有一個磁頭。

(3) 主軸:所有磁片都由主軸電機帶動旋轉。

(4) 控制集成電路板:復雜!上面還有ROM(內有軟體系統)、Cache等。

二 磁碟如何完成單次IO操作
(1) 尋道
當控制器對磁碟發出一個IO操作命令的時候,磁碟的驅動臂(Actuator
Arm)帶動磁頭(Head)離開著陸區(Landing
Zone,位於內圈沒有數據的區域),移動到要操作的初始數據塊所在的磁軌(Track)的正上方,這個過程被稱為尋道(Seeking),對應消耗的時
間被稱為尋道時間(Seek Time);

(2) 旋轉延遲
找到對應磁軌還不能馬上讀取數據,這時候磁頭要等到磁碟碟片(Platter)旋轉到初始數據塊所在的扇區(Sector)落在讀寫磁頭正下方之後才能開始讀取數據,在這個等待碟片旋轉到可操作扇區的過程中消耗的時間稱為旋轉延時(Rotational Delay);

(3) 數據傳送
接下來就隨著碟片的旋轉,磁頭不斷的讀/寫相應的數據塊,直到完成這次IO所需要操作的全部數據,這個過程稱為數據傳送(Data Transfer),對應的時間稱為傳送時間(Transfer Time)。完成這三個步驟之後單次IO操作也就完成了。

根據磁碟單次IO操作的過程,可以發現:
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間

進而推算IOPS(IO per second)的公式為:
IOPS = 1000ms/單次IO時間

三 磁碟IOPS計算
不同磁碟,它的尋道時間,旋轉延遲,數據傳送所需的時間各是多少?

1. 尋道時間
考慮到被讀寫的數據可能在磁碟的任意一個磁軌,既有可能在磁碟的最內圈(尋道時間最短),也可能在磁碟的最外圈(尋道時間最長),所以在計算中我們只考慮平均尋道時間。

在購買磁碟時,該參數都有標明,目前的SATA/SAS磁碟,按轉速不同,尋道時間不同,不過通常都在10ms以下:

3. 傳送時間2. 旋轉延時

和尋道一樣,當磁頭定位到磁軌之後有可能正好在要讀寫扇區之上,這時候是不需要額外的延時就可以立刻讀寫到數據,但是最壞的情況確實要磁碟旋轉整整
一圈之後磁頭才能讀取到數據,所以這里也考慮的是平均旋轉延時,對於15000rpm的磁碟就是(60s/15000)*(1/2) = 2ms。

(1) 磁碟傳輸速率
磁碟傳輸速率分兩種:內部傳輸速率(Internal Transfer Rate),外部傳輸速率(External Transfer Rate)。

內部傳輸速率(Internal Transfer Rate),是指磁頭與硬碟緩存之間的數據傳輸速率,簡單的說就是硬碟磁頭將數據從碟片上讀取出來,然後存儲在緩存內的速度。

理想的內部傳輸速率不存在尋道,旋轉延時,就一直在同一個磁軌上讀數據並傳到緩存,顯然這是不可能的,因為單個磁軌的存儲空間是有限的;

實際的內部傳輸速率包含了尋道和旋轉延時,目前家用磁碟,穩定的內部傳輸速率一般在30MB/s到45MB/s之間(伺服器磁碟,應該會更高)。

外部傳輸速率(External Transfer Rate),是指硬碟緩存和系統匯流排之間的數據傳輸速率,也就是計算機通過硬碟介面從緩存中將數據讀出交給相應的硬碟控制器的速率。

硬碟廠商在硬碟參數中,通常也會給出一個最大傳輸速率,比如現在SATA3.0的6Gbit/s,換算一下就是6*1024/8,768MB/s,通常指的是硬碟介面對外的最大傳輸速率,當然實際使用中是達不到這個值的。

這里計算IOPS,保守選擇實際內部傳輸速率,以40M/s為例。

(2) 單次IO操作的大小
有了傳送速率,還要知道單次IO操作的大小(IO Chunk Size),才可以算出單次IO的傳送時間。那麼磁碟單次IO的大小是多少?答案是:不確定。

操作系統為了提高 IO的性能而引入了文件系統緩存(File System Cache),系統會根據請求數據的情況將多個來自IO的請求先放在緩存裡面,然後再一次性的提交給磁碟,也就是說對於資料庫發出的多個8K數據塊的讀操作有可能放在一個磁碟讀IO里就處理了。

還有,有些存儲系統也是提供了緩存(Cache),接收到操作系統的IO請求之後也是會將多個操作系統的 IO請求合並成一個來處理。

不管是操作系統層面的緩存還是磁碟控制器層面的緩存,目的都只有一個,提高數據讀寫的效率。因此每次單獨的IO操作大小都是不一樣的,它主要取決於系統對於數據讀寫效率的判斷。這里以SQL Server資料庫的數據頁大小為例:8K。

(3) 傳送時間
傳送時間 = IO Chunk Size/Internal Transfer Rate = 8k/40M/s = 0.2ms

可以發現:
(3.1) 如果IO Chunk Size大的話,傳送時間會變大,從而導致IOPS變小;
(3.2) 機械磁碟的主要讀寫成本,都花在了定址時間上,即:尋道時間 + 旋轉延遲,也就是磁碟臂的擺動,和磁碟的旋轉延遲。
(3.3) 如果粗略的計算IOPS,可以忽略傳送時間,1000ms/(尋道時間 + 旋轉延遲)即可。

4. IOPS計算示例
以15000rpm為例:

(1) 單次IO時間
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間 = 3ms + 2ms + 0.2 ms = 5.2 ms

(2) IOPS
IOPS = 1000ms/單次IO時間 = 1000ms/5.2ms = 192 (次)
這里計算的是單塊磁碟的隨機訪問IOPS。

考慮一種極端的情況,如果磁碟全部為順序訪問,那麼就可以忽略:尋道時間 + 旋轉延遲 的時長,IOPS的計算公式就變為:IOPS = 1000ms/傳送時間
IOPS = 1000ms/傳送時間= 1000ms/0.2ms = 5000 (次)

顯然這種極端的情況太過理想,畢竟每個磁軌的空間是有限的,尋道時間 + 旋轉延遲 時長確實可以減少,不過是無法完全避免的。

四 資料庫中的磁碟讀寫
1. 隨機訪問和連續訪問
(1) 隨機訪問(Random Access)
指的是本次IO所給出的扇區地址和上次IO給出扇區地址相差比較大,這樣的話磁頭在兩次IO操作之間需要作比較大的移動動作才能重新開始讀/寫數據。

(2) 連續訪問(Sequential Access)
相反的,如果當次IO給出的扇區地址與上次IO結束的扇區地址一致或者是接近的話,那磁頭就能很快的開始這次IO操作,這樣的多個IO操作稱為連續訪問。

(3) 以SQL Server資料庫為例
數據文件,SQL Server統一區上的對象,是以extent(8*8k)為單位進行空間分配的,數據存放是很隨機的,哪個數據頁有空間,就寫在哪裡,除非通過文件組給每個表預分配足夠大的、單獨使用的文件,否則不能保證數據的連續性,通常為隨機訪問。
另外哪怕聚集索引表,也只是邏輯上的連續,並不是物理上。

日誌文件,由於有VLF的存在,日誌的讀寫理論上為連續訪問,但如果日誌文件設置為自動增長,且增量不大,VLF就會很多很小,那麼就也並不是嚴格的連續訪問了。

2. 順序IO和並發IO
(1) 順序IO模式(Queue Mode)
磁碟控制器可能會一次對磁碟組發出一連串的IO命令,如果磁碟組一次只能執行一個IO命令,稱為順序IO;

(2) 並發IO模式(Burst Mode)
當磁碟組能同時執行多個IO命令時,稱為並發IO。並發IO只能發生在由多個磁碟組成的磁碟組上,單塊磁碟只能一次處理一個IO命令。

(3) 以SQL Server資料庫為例
有的時候,盡管磁碟的IOPS(Disk Transfers/sec)還沒有太大,但是發現資料庫出現IO等待,為什麼?通常是因為有了磁碟請求隊列,有過多的IO請求堆積。

磁碟的請求隊列和繁忙程度,通過以下性能計數器查看:
LogicalDisk/Avg.Disk Queue Length
LogicalDisk/Current Disk Queue Length
LogicalDisk/%Disk Time

這種情況下,可以做的是:
(1) 簡化業務邏輯,減少IO請求數;
(2) 同一個實例下,多個資料庫遷移的不同實例下;
(3) 同一個資料庫的日誌,數據文件分離到不同的存儲單元;
(4) 藉助HA策略,做讀寫操作的分離。

3. IOPS和吞吐量(throughput)
(1) IOPS
IOPS即每秒進行讀寫(I/O)操作的次數。在計算傳送時間時,有提到,如果IO Chunk Size大的話,那麼IOPS會變小,假設以100M為單位讀寫數據,那麼IOPS就會很小。

(2) 吞吐量(throughput)
吞吐量指每秒可以讀寫的位元組數。同樣假設以100M為單位讀寫數據,盡管IOPS很小,但是每秒讀寫了N*100M的數據,吞吐量並不小。

(3) 以SQL Server資料庫為例
對於OLTP的系統,經常讀寫小塊數據,多為隨機訪問,用IOPS來衡量讀寫性能;
對於數據倉庫,日誌文件,經常讀寫大塊數據,多為順序訪問,用吞吐量來衡量讀寫性能。

磁碟當前的IOPS,通過以下性能計數器查看:
LogicalDisk/Disk Transfers/sec
LogicalDisk/Disk Reads/sec
LogicalDisk/Disk Writes/sec

磁碟當前的吞吐量,通過以下性能計數器查看:
LogicalDisk/Disk Bytes/sec
LogicalDisk/Disk Read Bytes/sec
LogicalDisk/Disk Write Bytes/sec

❺ 資料庫訪問頻繁 怎麼進行優化

1 插入數據時,涉及多次表數據更新
優化sql腳本,或者修改表設計
2 如果單純的查詢大於插入的話,請使用讀寫分離方案吧!