這一篇主要是要提一些關於建立資料庫應該要注意的事項。在上一篇中我提到了,MS SQL server因為圖形化介面做得好,加上較為便宜而逐漸提高市占率。But! 圖形化介面(SSMS)雖然好用,但請注意他會占掉相當的資源,而且有些功能是無法利用圖形化介面來做處理的。 因此還是乖乖學指令吧!當SQL server因為各種奇怪的因素以及設定,導致該台server的CPU使用率居高不下時,開啟圖形化介面(SSMS)真的是一件可怕的事情,在這種情況下,使用圖形化介面(SSMS)與打指令的危機處理速度便高下立判了。
那就先從建立資料庫的指令開始吧!由於建立資料庫所要注意的事項不少,因此分為兩篇。
指令如下:
---------------------------------------------------------------------------------------------
CREATE DATABASE 練習
ON PRIMARY
(
NAME='練習主檔',FILENAME='C:\練習\練主.mdf',
SIZE=5MB,MAXSIZE=UNLIMITED,FILEGROWTH=8%
)
LOG ON
(
NAME='練習紀錄',FILENAME='C:\練習\練記.ldf',
SIZE=3MB,MAXSIZE=UNLIMITED,FILEGROWTH=6%
)
---------------------------------------------------------------------------------------------
「建立一個練習資料庫
在預設群上
(
資料庫檔名='練習主檔',路徑='C:\練習\練主.mdf',
資料庫大小=5MB , 資料庫檔最大=無限制 , 資料庫檔單次成長大小=8%
)
LOG檔在
(
資料庫檔名='練習紀錄',路徑='C:\練習\練記.ldf',
資料庫大小=3MB , 資料庫檔最大=無限制 , 資料庫檔單次成長大小=6%
)
」
這樣一項一項對照,應該很清楚哪一段是代表甚麼意思吧?
但事情如果這麼簡單就好了。
首先是預設群(PRIMARY),由於預設群本身上面會有系統資料庫...等一些進行SQL server運作的資料庫,因此如果將資料庫建在預設群上,會導致預設群的肥大,進而導致SQL server運行的效率變差。 所以可以說是這是個不良的建立方式。
再者,請注意路徑的部分,是需要完整的絕對路徑以及附檔名,副檔名有三(.mdf、.ndf、.ldf)
1. .mdf檔每一個資料庫只能有一個
2. .ndf下篇再談
3. .ldf 就是LOG檔啦,它的功用就像是流水帳,會一直紀錄USER在SQL server上面做了甚麼事情。
第三 在建立資料庫時,請盡量「一開始就設定資料庫未來可能的大小」,請不要用預設的值,因為那也是拖慢效率的元凶之一。 當你的資料庫檔的空間已經無法再容納資料時,SQL server會去找作業系統要硬碟空間,我把這個過程擬人化在下面,就可以知道為什麼建議一次就設定好大小了。
當SQL server不夠空間時,他就會跑去找作業系統(以下預設為Windows):
SQL server:Windows老大,我的硬碟空間不夠存了,我要空間!
Windows:這樣阿,那你需要多少空間,你說。
SQL server:我要現在空間的8%
Windows:好,0.4MB拿去。
可是0.4MB是又能裝多少資料呢?所以不意外的,SQL server 很快又要去找Windows了
SQL server:Windows老大,我的硬碟空間又不夠存了,我要空間!
Windows:這樣阿,那你需要多少空間,你說。
SQL server:我要現在空間的8%
Windows:好,0.48MB拿去。
聰明如你,應該看出來了。SQL server根本一直忙著去找 Windows要空間,當然速度會很慢囉!因此如果預期資料會有2G,請乖乖一開始就先設定資料庫檔大小為2G。
第四 資料最大限制,雖然設為無上限,但其實還是有硬上限的,那就是這顆硬碟的最大空間,因此如果這顆硬碟都是要用SQL server,那可以一開始就把資料庫檔大小設定為這顆硬碟的大小。
第五 資料成長量,基本上如果檔案預期會超過1GB,請盡量用%數來成長,這樣一次要的空間比較多。 相反的,如果檔案不會超過1GB,那就用定量宣告的要空間,也就是改成像是「5MB」,這樣SQL server就知道一次要跟作業系統要5MB的空間來存資料。但如果整顆硬碟都是要給SQL server用,那建議一開始資料庫檔就是整顆硬碟的大小,而後改為不能長大(反正你也沒空間長了)
.ldf檔非常不建議跟.mdf放在同一顆硬碟,因為.ldf的功用只有一個-還原,因此當.mdf檔所在的硬碟掛了的時候,還可以靠.ldf檔來救資料。因此請盡可能不要把.ldf檔跟.mdf檔放在同一個硬碟(是指實體硬碟,不是指一顆硬碟切成C及D槽的不同)
一下子就花了半小時作解釋,改天有空再繼續補完後面的內容囉!