sql共享功能目录无法更改_大企业数据库服务首选!AliSQL这几大企业级功能你不可不知...
MySQL代表了開源數據庫的快速發展,從2004年前后的Wiki、WordPress等輕量級Web 2.0應用起步,到2010年阿里巴巴在電商及支付場景大規模使用MySQL數據庫,再到2012年開始阿里云RDS for MySQL為成千上萬家客戶提供可靠的關系數據庫服務,積累了來自內外部功能、性能、安全方面的眾多需求,培養了一支強勁的MySQL研發團隊,并打造了面向企業場景的AliSQL分支,高效演進并穩定地服務著內外部關鍵業務場景。
讓我們來一起看一下AliSQL中面向企業場景的設計及功能。
1,MySQL 80 Compatiable
MySQL 80有5個非常好的企業級功能,來逐一看一下:
Atomic DDL,MySQL 80去掉了表結構frm文件,實現了元數據信息字典化,可以保證DDL操作處理或回滾干凈,避免了表刪除不干凈的情況。
Instant Add Column,元數據字典化后,向表最后面加列(無默認值)時,可以只更改數據字典,而不需要更改表數據,實現了極快速的加列。
Window Function,窗口函數可以用來快速實現復雜的報表,在許多企業應用場景中都會出現。
Temp Engine,執行特別復雜的SQL時,需要用到內存之外的臨時空間,以前版本會動態地創建和刪除文件,而在MySQL 80中,使用了集中式的Temp Engine,避免不停地創建和刪除文件,有效降低了文件系統的壓力。
Hash Join,MySQL 8018中實現了Hash Join,可以加快多表(三表)以上關聯的SQL性能,在企業場景中由于業務邏輯復雜,多表關聯是常態,絕對的企業級功能。
我們在2019年推出了基于MySQL 80版本的AliSQL版本,遠遠領先于同行。
2、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資源消耗,給阿里云所有客戶帶來實實在在的技術紅利。
3、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上同步優化發布上線。
4、TDE & SM4
RDS 5.6/5.7/8.0都已經全線支持,并且支持SM4加密算法,可以確保客戶數據的安全。
5、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性能分析,也可以讓第三方基于這些性能數據來為客戶提供更好的性能優化服務。
6、Async File Purge
在文件系統中刪除一個特別大的文件(Drop Table/Partition、Truncate Table/Partition)時,可能會鎖定整個文件系統,導致同一個文件系統上的其他操作無法進行,阻塞整個實例。AliSQL中對這種行為進行了優化,當接到刪除表或分區的操作時,會記一個文件異步清理的任務,將表或分區的操作先做完,然后由后臺線程以相對溫和的方式進行清理。其原理是將大文件一步一步變小,到某個安全大小后,才徹底刪除文件。
7、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命令)引起的損壞問題。
8、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優化。
9、Binlog XA Tuning
MySQL的邏輯日志(Binlog)給數據訂閱帶來了極大的便捷性,但也給性能帶來了負面影響。在服務客戶的過程中,我們發現企業場景對性能的要求越來越高,便對啟用Binlog后的事務提交機制進行了重大的技術突破,在不影響Binlog的前提下,去除了XA機制帶來的所有負面性能影響,相較于原生的MySQL,事務處理性能提升將近一倍。更實現了事務提交的Pipeline機制,交由Dynamic Thread Pool的線程去回復用戶事務提交結果,進一步降底了線程池的線程數,提升了系統處理效率。
10、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專有宿主機
舉辦聯合發布會!
點擊下方
阿里云登錄 - 歡迎登錄阿里云,安全穩定的云計算服務平臺
立即預約!
(需登陸阿里云賬號哦!)
總結
以上是生活随笔為你收集整理的sql共享功能目录无法更改_大企业数据库服务首选!AliSQL这几大企业级功能你不可不知...的全部內容,希望文章能夠幫你解決所遇到的問題。