瞭解RDS的概念 這也是第一條,也是最重要的一條,在使用某項產品和服務之前,首先要瞭解該產品或服務的功能與限制,就像你買一個冰箱或洗衣機,通常也只有在閱讀完說明書之後才能利用起來它們的所以功能,以及使用時的註意事項,RDS for SQL Server也是如此。 RDS for SQL Server ...
瞭解RDS的概念
這也是第一條,也是最重要的一條,在使用某項產品和服務之前,首先要瞭解該產品或服務的功能與限制,就像你買一個冰箱或洗衣機,通常也只有在閱讀完說明書之後才能利用起來它們的所以功能,以及使用時的註意事項,RDS for SQL Server也是如此。
RDS for SQL Server與傳統的自建機房提供SQL Server的主要不同就是用戶所需負責資料庫的模塊多與少的問題,自建SQL Server與阿裡雲RDS for SQL Server所需負責的部分圖1所示:
當然,便捷的代價除了成本之外,另外就是限制,這就類似於用一些基礎的工具可以做各類工作,但專用的工具可以高效完成特定工作一樣,RDS更類似於專用的工具,
限制帶來的優勢
限制的目的是由於這部分工作由阿裡雲統一去做了,資料庫作為服務提供給使用者,因此使用者就沒有資料庫以下(操作系統、存儲等)部分的許可權,資料庫作為服務提供有以下幾點優勢:
簡單
最大的好處自然是簡單,無需再關註SQL Server的安裝、配置、監控、報警、備份、高可用等工作,這些工作往往是需要比較專業的人士進行長時間的付出才能建立一個完整的體系,由於資料庫往往是整個系統的核心部分,這些工作如果運維人員的水平問題或誤操作往往還會帶來比較嚴重的後果。 而在阿裡雲下麵,有一套完整的雲體系負責所有這些工作,以簡單直觀的界面就能夠將這些信息展示出來。如圖2,圖3所示。
標準化&最佳實踐化
由阿裡雲負責資料庫基礎配置的運維可以使得資料庫運維標準化,通常在SQL Server安裝後都需要進行一些諸如:最大並行度、文件增長、tempdb個數、操作系統許可權、磁碟IO分佈等等很多參數的配置,這些參數在很多情況下會對SQL Server的性能與可用性產生影響,而很多企業並沒有DBA或專業的資料庫運維人員,因此往往不能正確配置這些參數。 而阿裡雲則可以通過標準化將這些參數在實例生成時就進行配置,這這些配置都是經過大量實踐符合99%資料庫的最佳實踐,因此可以避免很多由於配置不當而產生的資料庫問題。
高可用
目前為止,從高可用性角度來看,阿裡雲RDS For SQL Server分為兩個版本,一個是雙機版,該版本底層使用SQL Server鏡像(Mirror)實現高可用,因此可以實現極高的可用性,即使出現硬體層面的故障,也能實現秒級的切換。 而對於單機版的SQL Server,高可用技術更像是虛擬化層面的漂移,當發生故障時,SQL Server從一臺宿主機到另外的宿主機,因此這種情況下是分鐘級。 可以根據業務類型的重要程度與成本的預算進行選擇。但推薦儘量使用雙機版。
利用阿裡雲提供的工具
RDS的一個優勢是已經對一些常用的操作進行了封裝,而這些操作如果手工完成通常會費時費力,而且容易出錯。比如在資料庫出現問題時將資料庫還原到某一個時間點,如果是DBA手工操作則需要完整的備份體系存在的情況下,按照備份順序進行還原,而在阿裡雲上都是一鍵操作,關於常用流程的使用可以看本篇文章的後半段。
善用彈性擴展
雲資料庫的一個很大的優勢是彈性擴展,意味著可以按需進行擴展,一般以下幾種情況比較適宜考慮彈性方面的功能:
- 業務增長:隨著業務增長動態擴容資料庫
- 業務高峰:比如雙十一等大促臨時提升伺服器規格,在業務低峰期再進行伺服器規格降級
- 臨時使用:比如申請一臺伺服器進行測試,這個過程使用雲資料庫不但避免了麻煩的資料庫安裝部署成本,還能在測試完成後關閉伺服器以節約成本。
瞭解許可權體系
上面說了,由於RDS是PAAS層的服務,所以需要讓渡一部分許可權,但其實絕大多數常用許可權還是可以使用的,可以使用命令fnmypermission函數瞭解當前登錄賬號所擁有的許可權,如圖:
設置可維護時間段
實際上RDS底層是有一些運維操作的,在運維操作時可能有閃斷出現,現在可以選擇接受的運維時間段,這可以根據業務來,預設是2:00am-6:00 am,這個時間適用於絕大多數場景,但某些場景比如海外業務,或者游戲業務晚上可能反而是高峰期,因此應該根據業務正確設置該值。
利用臨時實例
RDS有一個非常好的功能是臨時實例,在控制台如圖所示:
圖 .創建臨時實例功能圖 .指定從某個時間點創建臨時實例。
該功能可以從指定時間點的備份完全克隆出來一個實例,可以使用該實例進行下麵的工作:
- 測試:可以完全克隆出來一個數據副本,用於測試,而不影響線上生產環境的數據以及壓力
- 數據找回:如果有誤操作等,可以利用線上生產環境克隆出一份數據,然後手動找回數據
-
開發環境:可以通過臨時實例作為軟體開發環境,從而不再需要手動創建測試數據,開發過程中有數據支持也可以更容易及時發現BUG
最牛逼的還是這個功能是完全免費的。
利用內置的系統存儲過程完成一些undocument操作
rds在限制許可權之外還通過一套內部存儲過程可以完成一些“非標準”操作,這些存儲過程在master資料庫下,下麵是當前版本所支持的存儲過程
- [dbo].[sprdsaddlinkedserver](添加鏈接伺服器)
- [dbo].[sprdsconfigure](配置伺服器級別的參數)
- [dbo].[sprdscopy_database](複製資料庫)
- [dbo].[sprdsdbcc_trace](啟用跟蹤標記)
- [dbo].[sprdsreaderrorlogs](讀取SQL Server錯誤日誌)
-
[dbo].[sprdssetdbonline](將資料庫狀態改為Online)
比如,我們可以通過下麵命令將伺服器的“並行開銷閾值”改為50。
[dbo].[sp_rds_configure] 'cost threshold for parallelism','50'
考慮RDS底層架構的影響
由於RDS for Server雙機版底層使用的是SQL Server 鏡像,且為高安全模式,意味著所有的數據更新(插入、刪除、更新)全部需要同步到鏡像端,因此如果短時間內有大量的數據更新操作時,考慮降低每次事務的大小,比如一次刪除100W條數據的SQL可以寫為迴圈刪除,在每次迴圈中加入等待時間。
DELETE FROM 表 where 日期<'2015-1-1'
可以替換為:
DECLARE @r INT; SET @r=1; WHILE @r>0 BEGIN DELETE TOP(5000) FROM 表 where 日期<'2015-1-1' SET @r=@@ROWCOUNT; wait for dealy '00:00:00:01'
小結
在使用阿裡雲RDS for SQL Server時,要考慮PAAS層的結構與限制 ,RDS提供大量功能的同時,也需要讓渡一些許可權,瞭解底層原理最大化利用RDS提供的功能並避免限制才是使用的最佳實踐。