翻譯

2014年6月5日 星期四

MS-SQL(2)建立資料庫(上)

趁著現在有空的時候,繼續來撰寫文章吧!一樣還是要感謝梓君老師的教導!

這一篇主要是要提一些關於建立資料庫應該要注意的事項。在上一篇中我提到了,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槽的不同)

一下子就花了半小時作解釋,改天有空再繼續補完後面的內容囉!