了解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提供的功能并避免限制才是使用的最佳實踐。
文章列表