阿裡雲RDS for SQL Server使用的一些最佳實踐

来源:http://www.cnblogs.com/CareySon/archive/2017/11/09/best-parctice-for-aliyun-rds-for-sql-server.html
-Advertisement-
Play Games

瞭解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手工操作則需要完整的備份體系存在的情況下,按照備份順序進行還原,而在阿裡雲上都是一鍵操作,關於常用流程的使用可以看本篇文章的後半段。

善用彈性擴展

雲資料庫的一個很大的優勢是彈性擴展,意味著可以按需進行擴展,一般以下幾種情況比較適宜考慮彈性方面的功能:

  1. 業務增長:隨著業務增長動態擴容資料庫
  2. 業務高峰:比如雙十一等大促臨時提升伺服器規格,在業務低峰期再進行伺服器規格降級
  3. 臨時使用:比如申請一臺伺服器進行測試,這個過程使用雲資料庫不但避免了麻煩的資料庫安裝部署成本,還能在測試完成後關閉伺服器以節約成本。

瞭解許可權體系

上面說了,由於RDS是PAAS層的服務,所以需要讓渡一部分許可權,但其實絕大多數常用許可權還是可以使用的,可以使用命令fnmypermission函數瞭解當前登錄賬號所擁有的許可權,如圖:

許可權體系

 

設置可維護時間段

實際上RDS底層是有一些運維操作的,在運維操作時可能有閃斷出現,現在可以選擇接受的運維時間段,這可以根據業務來,預設是2:00am-6:00 am,這個時間適用於絕大多數場景,但某些場景比如海外業務,或者游戲業務晚上可能反而是高峰期,因此應該根據業務正確設置該值。

利用臨時實例

RDS有一個非常好的功能是臨時實例,在控制台如圖所示:

chuangjianlinshishili

圖 .創建臨時實例功能linshishili2圖 .指定從某個時間點創建臨時實例。

該功能可以從指定時間點的備份完全克隆出來一個實例,可以使用該實例進行下麵的工作:

  1. 測試:可以完全克隆出來一個數據副本,用於測試,而不影響線上生產環境的數據以及壓力
  2. 數據找回:如果有誤操作等,可以利用線上生產環境克隆出一份數據,然後手動找回數據
  3. 開發環境:可以通過臨時實例作為軟體開發環境,從而不再需要手動創建測試數據,開發過程中有數據支持也可以更容易及時發現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 
   FROMwhere 日期<'2015-1-1'  

 

 

可以替換為:

DECLARE @r INT;
  
SET @r=1;
 
WHILE @r>0
BEGIN

 
  DELETE TOP(5000)
   FROMwhere 日期<'2015-1-1'
 
  SET @r=@@ROWCOUNT;
 
 wait for dealy '00:00:00:01'

 

 

小結

在使用阿裡雲RDS for SQL Server時,要考慮PAAS層的結構與限制 ,RDS提供大量功能的同時,也需要讓渡一些許可權,瞭解底層原理最大化利用RDS提供的功能並避免限制才是使用的最佳實踐。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • function Set() { this.dataStore = []; }; Set.prototype = { constructor: Set, add: function (data) { if (this.dataStore.indexOf(data) -1) { this.dataSt... ...
  • [轉載自zhoujian43] 演算法是程式的靈魂,一個優秀的前端工程師對演算法也是要有所瞭解的。 1. 冒泡排序 2. 快速排序 3. 二路歸併 將兩個按值有序序列合併成一個按值有序序列,則稱之為二路歸併排序 字元串操作 1. 判斷迴文字元串 2. 翻轉字元串 思路1:反向遍歷字元串 思路2:轉化成a ...
  • function HashTable() { this.table = new Array(137); }; HashTable.prototype = { constructor: HashTable, simpleHash: function(data) { var total = 0; for... ...
  • web前端學習攻略 第一階段: HTML+CSS: HTML進階、CSS進階、div+css佈局、HTML+css整站開發、 JavaScript基礎: Js基礎教程、js內置對象常用方法、常見DOM樹操作大全、ECMAscript、DOM、BOM、定時器和焦點圖。 JS基本特效: 常見特效、例如: ...
  • 因為項目用到Datatables發現在分頁特別多時無法跳轉到指定頁,自己動手增加了#Datatables 跳轉到指定頁#功能,實現代碼如下: ...
  • Vue官網: https://cn.vuejs.org/v2/guide/forms.html#基礎用法 【入門系列】 (一) http://www.cnblogs.com/gdsblog/p/7804785.html (二) http://www.cnblogs.com/gdsblog/p/780 ...
  • SQL Server In-Memory OLTP Internals for SQL Server 2016 這份白皮書是在上一份《SQL Server In-Memory OLTP Internals Overview》基礎上的,很多東西都是一樣的不再介紹,只介紹不相同的部分。 行和索引存儲 R ...
  • select '['+title_a+','+title_b +']' from A for xml path('') SELECT *, (select '['+title_a+','+title_b +']' from A where A.t_id=B.t_id for xml path('') ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...