大型企業數據庫服務首選,AliSQL這幾大企業級功能你瞭解幾個?

AliSQL是阿里雲深度定製的獨立MySQL分支,除了社區版的全部功能外,AliSQL提供了相似於MySQL企業版的諸多功能,如企業級備份恢復、線程池、並行查詢等,而且AliSQL還提供兼容Oracle的能力,如sequence引擎等。RDS MySQL使用AliSQL內核,爲用戶提供了MySQL全部的功能,同時提供了企業級的安全、備份、恢復、監控、性能優化、只讀實例等高級特性。html

1月9日,依託AliSQL內核的專屬主機組RDS MySQL服務即將重磅發佈!
時間: 1月9日15:00 — 17:00
主題: RDS專屬主機組和ECS專有宿主機 聯合發佈會
詳情:https://promotion.aliyun.com/ntms/act/mysqlzhuanshuzhuji.html
預定直播!:https://yq.aliyun.com/live/1858
(需登錄阿里雲帳號哦!)mysql

MySQL表明了開源數據庫的快速發展,從2004年先後的Wiki、WordPress等輕量級Web 2.0應用起步,到2010年阿里巴巴在電商及支付場景大規模使用MySQL數據庫,再到2012年開始阿里雲RDS for MySQL爲成千上萬家客戶提供可靠的關係數據庫服務,積累了來自內外部功能、性能、安全方面的衆多需求,培養了一支強勁的MySQL研發團隊,並打造了面向企業場景的AliSQL分支,高效演進並穩定地服務着內外部關鍵業務場景。算法

讓咱們來一塊兒看一下AliSQL中面向企業場景的設計及功能。sql

一、MySQL 8.0 Compatiable

MySQL 8.0有5個很是好的企業級功能,來逐一看一下:數據庫

  • Atomic DDL,MySQL 8.0去掉了表結構frm文件,實現了元數據信息字典化,能夠保證DDL操做處理或回滾乾淨,避免了表刪除不乾淨的狀況。
  • Instant Add Column,元數據字典化後,向表最後面加列(無默認值)時,能夠只更改數據字典,而不須要更改表數據,實現了極快速的加列。
  • Window Function,窗口函數能夠用來快速實現複雜的報表,在許多企業應用場景中都會出現。
  • Temp Engine,執行特別複雜的SQL時,須要用到內存以外的臨時空間,之前版本會動態地建立和刪除文件,而在MySQL 8.0中,使用了集中式的Temp Engine,避免不停地建立和刪除文件,有效下降了文件系統的壓力。
  • Hash Join,MySQL 8.0中實現了Hash Join,能夠加快多表(三表)以上關聯的SQL性能,在企業場景中因爲業務邏輯複雜,多表關聯是常態,絕對的企業級功能。

咱們在2019年推出了基於MySQL 8.0版本的AliSQL版本,遠遠領先於同行。緩存

二、Dynamic Thread Pool

企業級場景(包括互聯網與非互聯網場景)的商業數字化程度愈來愈高,應用場景愈來愈豐富,RDS數據庫如何在有限資源(4c/8c規格,雲上彈性降底企業成本)的狀況下提供高質量服務,會面臨如下挑戰:安全

  • 如何在有限的資源下,支持更多的數據庫鏈接數?
  • 如何支持更高的短鏈接能力?
  • 如何在有限的資源下,提升資源的使用效率,提高性能?
  • 如何進行併發控制或隔離,保證核心業務邏輯的穩定性?

Dynamic Thread Pool能夠很好地解決上述問題,性能優化

  • 採用Listener & Worker機制,將全部請求放到Worker隊列中,由共享的Worker線程來執行不一樣用戶的請求,從而不須要每一個客戶端會話都建立一個後臺線程(非Dynamic Thread Pool)來執行請求,好比1000個客戶端鏈接發起請求,服務器端只須要數十個Worker線程便可,而不須要建立1000個線程,從而能夠在有限資源內建立更多的鏈接。
  • 因爲每一個鏈接後面並不對應固定的線程,建立新鏈接時沒有線程的操做,所以創建新鏈接的成本大大降底,從而能夠提供更高和更穩定的鏈接建立能力。
  • 經過控制了有限資源內的線程數,減小了線程切換,有效下降了SYS CPU的使用,提高了CPU的資源使用效率。在高併發的sysbench point select測試中,Dynamic Thread Pool能夠提高10%左右的性能;在低併發時,Dynamic Thread Pool能夠動態切換回專用模式,即每一個鏈接都有專用的Worker對應,從而保證高低併發下都有極好的性能。
  • 在數據庫中有讀寫操做,SQL操做也能夠分爲簡單操做和複雜操做,爲了防止相互影響,Dynamic Thread Pool設計了多個隊列,按SQL的操做成本將SQL進行分類,各自進入不一樣的隊列,並在隊列上進行併發的控制,從而能夠隔離不一樣類型操做的相互影響。好比說核心業務邏輯中都是簡單查詢,新建應用未經評審的複雜SQL就不會影響核心邏輯。
  • Dynamic Thread Pool能夠動態啓停,不須要重啓數據庫實例。這是AliSQL Dynamic Thread Pool一個很是重大的技術創新與突破。

Dynamic Thread Pool已經在RDS 5.6/5.7/8.0版本上線,並已經默認開啓,全部用戶和客戶均可以受益。TPCC模型最接近企業核心業務場景,在1024或2048客戶端併發的TPCC測試中,Dynamic Thread Pool能夠提高50%-100%左右的TpmC,並節約10%到20%的CPU資源消耗,給阿里雲全部客戶帶來實實在在的技術紅利。服務器

三、Index Mutex Tuning

TPCC模型最接近企業核心業務場景,對此場景的優化可讓企業應用受益。在TPCC的壓力測試中,發現Index的鎖很是重,在節點分裂時會阻塞全部的其餘操做。AliSQL對此進行了優化,有效地下降了壓測過程當中,索引節點分裂的成本,大大地提高了TPCC場景的處理能力。在全內存的測試中,單機達到了39W的TpmC,相對於原生版本提高35-50%不等(大規格測試,5.6提高35%、5.7提高40%、8.0進升45%)。網絡

此優化已在RDS 56/57/80上同步優化發佈上線。

四、TDE & SM4

RDS 5.6/5.7/8.0都已經全線支持,而且支持SM4國密算法,能夠確保客戶數據的安全。

五、Performance Insight

應用側的SQL優化對系統及業務的優化相當重要,原生的MySQL中缺乏行之有效的監控數據,AliSQL結合不一樣數據庫的經驗,並結合內部外部客戶的需求,在SQL性能這塊作了豐富的擴展,包含如下五個方面的擴展:

  • table_stats,記錄每一個表增刪除改查的行數,能夠快速地瞭解現有系統中的數據存取行爲,判斷業務的核心表,判斷哪些表適合來做緩存處理。
  • index_stats,記錄用到的索引以及索引被使用的頻率,能夠快速地瞭解索引的使用狀況,判斷哪些索引是多餘的,判斷哪些索引是核心的索引。
  • Performance Point,記錄了每一個SQL的細粒度性能數據,包括SQL語句的時間(包括消耗時間、執行時間、Server層MDL鎖的時間、事務鎖的時間)、SQL IO的信息(包括這條SQL引發的數據讀、數據寫、日誌生成、內存訪問、物理讀寫的量及IO時間)、以及內核層面的鎖(包括Mutex、RW Lock)的次數和時間。很容易找到值得優化的SQL語句,若是有必定的源代碼能力,也能夠分析和改進MySQL的鎖機制。
  • Performance Agent,使用內置Daemon程序,在同一時間點收集不一樣惟度(CPU、內存、網絡、磁盤IO、Server、InnoDB、Linux Kernel、File System)的關鍵性能數據,每秒收集一次,以格式化文本方式在後臺記錄,便於過後進行性能分析,同時也是內存表的方式提供訪問,方便客戶直接使用Grafana等工具來展現RDS數據庫性能曲線。

  • IO_STATISTICS,記錄實例級各類不一樣IO的總量及時間,默認每2秒一個值(可配置),能夠直接使用Grafana等工具來展現。

在仔細分析原生Performance Schema後,AliSQL中增長了這些額外的性能相關的數據,如實地反映了系統的運行狀況,方便咱們進行過後性能問題診斷,也方便了客戶進行SQL性能分析,也可讓第三方基於這些性能數據來爲客戶提供更好的性能優化服務。

六、Async File Purge

在文件系統中刪除一個特別大的文件(Drop Table/Partition、Truncate Table/Partition)時,可能會鎖定整個文件系統,致使同一個文件系統上的其餘操做沒法進行,阻塞整個實例。AliSQL中對這種行爲進行了優化,當接到刪除表或分區的操做時,會記一個文件異步清理的任務,將表或分區的操做先作完,而後由後臺線程以相對溫和的方式進行清理。其原理是將大文件一步一步變小,到某個安全大小後,才完全刪除文件。

七、Slow Log Rotate

某些業務場景下,會產生大量的慢SQL語句,會被記錄在慢日誌中,而原生的MySQL一直使用單個文件機制會一直保持Slow Log文件打開,致使文件變得特別大(可高在上百GB),須要在關閉MySQL實例的狀況下,才能對Slow Log文件進行維護,很是地不友好。
AliSQL對此做出了改進,設計了Slow Log切換機制,能夠定時或到指定大小後進行切換(切換指令由外部觸發),避免須要重啓數據庫實例來維護Slow Log文件(好比釋放Slow Log空間)。其間還修復了以CSV格式存放Slow Log時,SQL執行時間範圍超過35天(一般是Binlog Dump命令)引發的損壞問題。

八、SQL Outline

SQL Hint是很是有效的優化手段,AliSQL對SQL Hint作了功能擴展,能夠在運行過程當中將SQL計算中的路徑信息用相應的SQL Hint進行持久化保存,以保證執行計劃的穩定性。能夠有效應對如下場景下的SQL執行計劃變動:

  • 數據庫版本升級,優化器行爲會發生變化,SQL計算計劃可能變好也可能變壞。
  • DDL操做,新建索引後,會致使原有的SQL執行計劃發生變化。
  • 統計信息發生變化,從新收集或人工設置後,SQL執行計劃可能發生變化。

對於核心業務的SQL,應當使用SQL Outline進行固化,避免SQL執行計劃變壞。

AliSQL還提供API進行SQL Hint編輯,便可以手工給SQL加一個Hint,進行透明的SQL優化,能夠在沒法更改應用程序代碼的狀況下進行SQL優化。並在此基礎上,與AliSQL其餘的優化功能進行集成,好比Statement Queue、Query Cache(研發中)等,能夠經過在SQL Outline中指定Hint來啓用Statement Queeu的併發控制,或啓用Query Cache,實現對應用透明的SQL優化。

九、Binlog XA Tuning

MySQL的邏輯日誌(Binlog)給數據訂閱帶來了極大的便捷性,但也給性能帶來了負面影響。在服務客戶的過程當中,咱們發現企業場景對性能的要求愈來愈高,便對啓用Binlog後的事務提交機制進行了重大的技術突破,在不影響Binlog的前提下,去除了XA機制帶來的全部負面性能影響,相較於原生的MySQL,事務處理性能提高將近一倍。更實現了事務提交的Pipeline機制,交由Dynamic Thread Pool的線程去回覆用戶事務提交結果,進一步降底了線程池的線程數,提高了系統處理效率。

十、DDL Recycle Bin

在MySQL中DDL語句是沒法回滾的,所以Drop/Truncate表或分區的操做會變得極期危險,在商業數據庫中也是如此。

Oracle在10g中加入了回收站的功能,能夠將Drop/Truncate的表或分區先放到回收站中,後續根據空間的使用狀況,按先進先出的策略自動回收。這樣就能夠在Drop/Truncate誤操做手,從回收站中快速恢復數據,而不須要進行實例基於時間點的恢復來找回誤操做的表,AliSQL在8.0上也實現了此回收站功能。

AliSQL還有其餘的企業級功能,例如Sequence引摯、Statement Queue等,在這裏不一一詳細解釋。

從業務中找需求,從技術中找需求,從運行維護中找需求,從合做夥伴中找需求,全部的需求方都是咱們的客戶,一直致力於讓AliSQL更加開放更加面向企業級應用。

大型企業數據庫服務首選,專屬主機組RDS MySQL服務重磅發佈!
時間: 1月9日15:00 — 17:00

主題: RDS專屬主機組和ECS專有宿主機 聯合發佈會

觀看方式:當即預定請戳下方連接??

https://yq.aliyun.com/live/1858?spm=a2c4e.11155435.0.0.47c97796lYEQzh&do=login&accounttraceid=14d775f2522241d4871f6aab6e95e597anna
(需登錄阿里雲帳號哦!)


本文做者:黃忠

原文連接

本文爲阿里雲內容,未經容許不得轉載。

相關文章
相關標籤/搜索