迷思止步 - 系列三:SQL Server,其實不簡單!

事實上,企業推動任何應用開發計畫,對於究竟搭配何等資料庫系統,通常並無定見,即使過去長年採用A平台,如今想轉換為B,只要對公司更加有利,都未嘗不可。但在現實環境,資料庫的轉換卻可能橫生阻礙,原因在於部分DBA並不輕易嘗試這番轉變。

若形容資料庫管理員 (Database Administration;DBA) 是企業 e 化的重要功臣之一,其實並不為過;主因在於,唯有底層資料庫系統能夠正常運轉,也才能確保上層應用服務得以順利推行,兩者唇齒相依,顯見資料庫確實極為重要。

在此前提下,肩負著資料庫系統安裝與設定、容量規劃、應用架構設計、資料庫物件管理、儲存空間管理、安全管理、備份與復原、效能監控與調優、調度作業、網路管理、可用度暨延展性管理、故障排除等重大使命的 DBA,對於企業資料庫系統的選用,自然擁有很大的話語權。

甚至在某些狀況下,單憑部分 DBA 一人意志,即可發揮「愛之欲之生,恨之欲之死」效果,使得特定的資料庫產品,能夠與企業的應用服務環境長廂左右,至於其他的資料庫產品,那怕功能齊備、性能優異、穩定度高超、價錢又漂亮,公司內部人人皆曰可用,但他老兄硬是獨排眾議,始終被拒於門外。

看似複雜的事物,未必難如登天

探究部分 DBA 之所以固執己見,道理其實很簡單,即是捍衛既得利益,唯恐他在公司的「存在感」,可能由於資料庫系統的轉換,而變得蕩然無存。 

這些 DBA 很瞭解他個人心路歷程,也藉由過往經驗的累積,知道應該在哪些地方築起門檻,突顯一種艱深晦澀的氛圍,進而連同系統與個人,皆被形塑「無可取代」的刻板印象;意即唯獨這套資料庫系統,可以將關鍵應用任務執行得又快又好,但由於該系統的技術底蘊太深,而它所依附的Unix作業系統,學問又太過艱難,面對這個「生人勿近」的環境,唯獨 DBA 有能力身涉險境、排除萬難,駕馭這套甚難馴服的複雜系統。

反觀微軟的 SQL Server,多數 DBA 心知肚明,隨著 AlwaysOn、ColumnStore 等眾多嶄新功能的加入,不管在於穩定性、效能等各個方面,都已非昔日吳下阿蒙,要想支撐企業關鍵應用任務的運行,肯定沒問題。但由於 SQL Server 進入門檻相對較低,資源取得相對容易,又有相對龐大的生態體系 (Eco-system) 在背後撐腰,所以企業一旦採用這套系統,若干DBA便擔心無法突顯個人價值,因為隨時都有一缸子好手,可以取自己而代之。

然而這般論述,果真存在不少謬誤之處。首先,某些被部分 DBA「奉為神主牌膜拜」的資料庫系統,最困難的地方,乃在於它要被安裝到 Unix 作業系統的過程;因為 Unix 可分為多個門派,假設裝載到AIX,所需具備的知識與經驗,肯定與 HP-UX、Solaris 多所不同,倘若欠缺相關知識與經驗,當然不知從何下手,就會視它為艱深難懂之物。

這些資料庫之所以「難」,只是難在這個地方,其餘部分都還好;因此若干 DBA 如果僅想以偏概全、突顯身價,就算可以一時奏效,也很難持續得逞,原因是現今資訊太過發達,很難有任何資訊死角,可以一直被隱匿下去。

你真的低估 SQL Server 了!

其次,Unix-based 資料庫系統通常都安裝在昂貴機器,可能光是一條 RAM 就得要價 5~6 萬元,致使硬體升級淪為一件「恐怖」的事;所以,它無法像是 SQL Server,只要效能變慢,就直接換機器,而必須倚賴 DBA 實施優化手段。

前述觀點,潛藏了兩個迷思。第一,那些可以安裝在 Unix OS 的資料庫系統,說到調優,雖然難免有其學習門檻,但絕非難如登天,所以部分 DBA 不應藉此高估自身功力;第二,導致 SQL Server 效能弱化的原因,固然可能有很大機會,是與 Disk I/O 息息相關,看似可憑藉硬體更換而獲致重大改善,但有些效能瓶頸,其實是因為語法不佳所致,如果不解開這個死結,縱使換置性能強大的硬體,也未必能提高系統執行效率。

這也意謂著,DBA 可別把 SQL Server 低估為「一經安裝,爾後可以什麼事都不做」,它依然需要被調優,而且這些優化措施可謂易學難精,不管是 Windows 作業系統內建的效能監視器,乃至於 SQL Server 裡頭的 DBCC CHECKTABLE、Profiler 或 DTA,樣樣都得融會貫通,而且只要善用優化技巧,前後改善的幅度相當大。

舉例來說,為了確保交易與交易之間互不干擾,通常企業選擇會在資料庫層面執行隔離性保證、或採用 Lock 陳述式,藉以針對資料庫或相關欄進行鎖定,同一時間僅允許一個交易做寫入或讀取。

但以隔離性保證而論,倘若野心太大,想一舉清除 Dirty Read、Unrepeatable Reads、Phantom Reads 或 Lost Updates 等所有疑慮,因而採取 Serializable 最嚴格等級來執行完全鎖定;如此一來,所有交易都得循序排隊,一個接著一個來,難免會對效能構成嚴重衝擊,而且不是更換強大硬體就可以解決的,此時就得考驗 DBA 的智慧與功力,才能找出最佳的改善之道。

由此可見,作為一個 SQL Server 資料庫的 DBA,光是面對系統慘遭鎖死之現象,其間所蘊含的調優空間,便已十分遼闊,只要做得好,就是個足以發光發熱的舞台,並無身價大減的疑慮。