翻譯

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槽的不同)

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

2014年5月27日 星期二

MS-SQL(1)資料庫雜談

基本上這個網誌內的文章,會有一大部分會圍繞在「MS-SQL server 2012」這套軟體上,首先還是先來感謝邱梓君老師的教授。雖然這篇文章距離上這堂課的時間有點久了,但我盡可能的將所學的呈顯出來,順便練習自己的表達能力。

首先先大約介紹一下資料庫吧! 資料庫(Database)程式顧名思義,就是用來儲存資料的程式,而我們對於資料庫的要求其實也不多,不外乎是存資料、找資料、找快一點,這三項,因此要先分清楚,有些事情是資料庫所該做的,有一些事該由程式去處理的,至於那些該由程式處理的呢?會在後續的文章中一一提到。

目前來說,全世界資料庫的No.1應該沒有人會質疑,那就是Oracle,不過Oracle的資料庫很貴、非常貴!至於No.2就能算是M$-SQL server了,而且在台灣,微軟的市占率驚人,而且MS-SQL server的價格較Oracle便宜許多,再加上MS-SQL的圖形化介面相當優秀,性能在SQL server 2005後改善許多,以至於市占率逐漸升高。

而且微軟本身對於Oracle相當不友善,同樣的電腦灌Oracle以及SQL server,會發現Oracle硬生生就是比SQL server慢,我想這也無可厚非啦!畢竟是自己的作業軟體,連起來的速度當然快,嵌合方便許多,But,人生最基八的就是這個But,因為圖形化介面做得太好了,導致許多新手就是靠著圖形化介面來使用,而會出現一些莫名其妙的問題,像是為了阻止ldf檔(註1)的長大,於是卸載資料庫後,把ldf檔刪掉,然後重新掛載後重建ldf檔,果然生命會自己找到出路啊!

再者,資料庫本身一旦用了,通常就會定下來了。因為在企業中的資料量之大(想一想家樂福一天的資料吧),你真的有那個膽量把那些資料匯出來,然後再匯到另一個資料庫?萬一資料發生損毀,這可就不是寫辭呈可以解決的了。
也因為如此,所以台灣較老的企業會以Oracle為主(因為SQL server 2005以前真的很爛),By the way 金融業會用 IBM的資料庫居多。而較新的公司則會用便宜又大碗的SQL server為主。

對了,一旦購買了SQL server,在授權時間內是可以無限進行版本更新的。可是Oracle不一樣,每升級一次版本,抱歉,你還是要付錢,因此也導致使用 SQL server的人數逐漸增加,畢竟相較起來,微軟不像Oracle如此吃錢。

因此,在台灣這個微軟市占率超高、壓低成本為取向下,我就這麼踏上了學習資料庫的不歸路了.....

註1:ldf檔為資料庫的log檔,作用是紀錄資料庫所有做過的事情(像是輸入那些資料),在後續的文章中會特別針對ldf來介紹。

關於本網誌

如果在一年前,你告訴我以後你會走IT產業,我一定會問你是不是腦袋有些問題。
但誰知道,我居然莫名其妙的從諮輔這個領域叛逃到IT領域,兩者間的相關性我想破了頭也想不出來,但事情就是如此發生了。

由於我在IT這個領域其實學識尚淺,而且平日晚上也還在外上課學習資料庫與C#,因此特別開這個網誌來記錄一些上課的內容以及工作上所遇到的問題,也順便當作複習以及自己的資識庫,以後遇到同樣的問題,而且我又忘記的時候,至少可以看一下以前自己的心得。(當然,不要忘記當然是最好的XD)

有鑑於自己本身非本科系出身的,因此在措辭上或是觀念上或許有些錯誤,也歡迎與希望各路過的強者能夠不吝指教,讓我能夠修正自己的錯誤。

本人所學習的內容為:C#以及MS-SQL,都是由「邱梓君」老師所教授,謹以此網誌感嘆老師、讚嘆老師。

如果有任何問題疑問也歡迎留言,我會盡我所能的解答喔!