搜尋
首頁資料庫mysql教程介紹MySQL大表優化方案

介紹MySQL大表優化方案

Jan 28, 2021 am 09:28 AM
mysql

介紹MySQL大表優化方案

#免費學習推薦:mysql資料庫(視頻)

背景

阿里雲RDS FOR MySQL(MySQL5.7版本)資料庫業務表每月新增資料量超過千萬,隨著資料量持續增加,我們業務出現大表慢查詢,在業務高峰期主業務表的慢查詢需要幾十秒嚴重影響業務

##方案概述

介紹MySQL大表優化方案

一、資料庫設計及索引最佳化

MySQL資料庫本身高度靈活,造成效能不足,嚴重依賴開發人員的表格設計能力以及索引最佳化能力,在這裡給幾點優化建議

    時間類型轉換為時間戳格式,用int類型儲存,建索引增加查詢效率
  • 建議欄位定義not null,null值很難查詢最佳化且佔用額外的索引空間
  • 使用TINYINT類型取代枚舉ENUM
  • #儲存精確浮點數必須使用DECIMAL取代FLOAT和DOUBLE
  • #欄位長度嚴重根據業務需求來,不要設定過大
  • 盡量不要使用TEXT類型,如必須使用建議將不常用的大字段拆分到其它表
  • MySQL對索引字段長度是有限制的, innodb引擎的每個索引列長度預設限制為767位元組(bytes),所有組成索引列的長度和不能大於3072位元組(mysql8.0單索引可以建立1024字元)
  • 大表有DDL需求時請聯絡DBA
最左索引匹配規則

顧名思義就是最左優先,在建立組合索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊。複合索引很重要的問題是如何安排列的順序,例如where後面用到c1, c2 這兩個字段,那麼索引的順序是(c1,c2)還是(c2,c1)呢,正確的做法是,重複值越少的越放前面,例如一個列95%的值都不重複,那麼一般可以將這個列放最前面

    複合索引index(a,b,c)
  • where a=3 只使用了a
  • where a=3 and b=5 使用了a,b
  • where a=3 and b=5 and c=4 使用了a, b,c
  • where b=3 or where c=4 沒有使用索引
  • where a=3 and c=4 僅使用了a
  • where a=3 and b> 10 and c=7 使用了a,b
  • where a=3 and b like 'xx%' and c=7 使用了a,b
  • 其實相當於創建了多個索引:key (a)、key(a,b)、key(a,b,c)

#二、資料庫切換到PloarDB讀寫分離

PolarDB是阿里雲自研的下一代關聯式雲端資料庫,100%相容MySQL儲存容量最高可達100 TB,單庫最多可擴充到16個節點,適用於企業多樣化的資料庫應用場景。 PolarDB採用儲存和計算分離的架構,所有計算節點共享一份數據,提供分鐘級的配置升降級、秒級的故障恢復、全局數據一致性和免費的數據備份容災服務。

    叢集架構,運算與儲存分離
  • PolarDB採用多節點叢集的架構,叢集中有一個Writer節點(主節點)和多個Reader節點(唯讀節點),各節點透過分散式檔案系統(PolarFileSystem)共享底層的儲存(PolarStore)
  • 讀寫分離
  • 當應用程式使用叢集位址時,PolarDB透過內部的代理層(Proxy)對外提供服務,應用程式的請求都先經過代理,然後才存取到資料庫節點。代理層不僅可以做安全性認證和保護,還可以解析SQL,把寫入操作(例如交易、UPDATE、INSERT、DELETE、DDL等)送到主節點,把讀取操作(例如SELECT)均衡地分發到多個隻讀節點,實現自動的讀寫分離。對於應用程式來說,就像使用一個單點的資料庫一樣簡單。
在離線混合場景:不同業務用不同的連接位址,使用不同的資料節點,避免相互影響

介紹MySQL大表優化方案

Sysbench效能壓測報告:

    PloarDB 4核心16G 2台

介紹MySQL大表優化方案
介紹MySQL大表優化方案

##PloarDB 8核心32G 2台

介紹MySQL大表優化方案
介紹MySQL大表優化方案

三、分錶歷史資料遷移到MySQL8.0 X-Engine儲存引擎

分錶業務表保留3個月資料(這個根據公司需求來),歷史資料按月分錶到歷史庫X-Engine儲存引擎表, 為什麼要選用X-Engine儲存引擎表,它有什麼優點?

  1. 節約成本, X-Engine的儲存成本約為InnoDB的一半
  2. X-Engine分層儲存提高QPS, 採用層次化的儲存結構,將熱資料與冷資料分別存放在不同的層次中,並預設對冷資料所在層級進行壓縮

X-Engine是阿里雲資料庫產品事業部自研的線上事務處理OLTP(On-Line Transaction Processing)資料庫儲存引擎。
X-Engine儲存引擎不僅可以無縫對接相容MySQL(得益於MySQL Pluginable Storage Engine特性),同時X-Engine使用分層儲存架構。因為目標是面向大規模的海量數據存儲,提供高並發事務處理能力和降低存儲成本,在大部分大數據量場景下,數據被訪問的機會是不均等的,訪問頻繁的熱數據實際上佔比很少,X-Engine根據資料存取頻度的不同將資料劃分為多​​個層次,針對每個層次資料的存取特點,設計對應的儲存結構,寫入適當的儲存裝置

  • #X-Engine使用了LSM-Tree作為分層存儲的架構基礎,並進行了重新設計:
  • 熱數據層和數據更新使用內存存儲,通過內存數據庫技術(Lock-Free index structure/ append only)提高事務處理的效能。
  • 管線事務處理機制,把事務處理的幾個階段並行起來,大大提升了吞吐。
  • 存取頻度低的資料逐漸淘汰或是合併到持久化的儲存層次中,並結合多層次的儲存設備(NVM/SSD/HDD)進行儲存。
  • 對效能影響比較大的Compaction過程做了大量最佳化:
  • 分割資料儲存粒度,利用資料更新熱點較為集中的特徵,盡可能的在合併過程中復用數據。
  • 精細化控制LSM的形狀,減少I/O和計算代價,有效緩解了合併過程中的空間增大。
  • 同時使用更細粒度的存取控制和快取機制,優化讀取的效能。

介紹MySQL大表優化方案

四、阿里雲PloarDB MySQL8.0版本並行查詢

分錶之後我們的資料量依然很大,並沒有完全解決我們的慢查詢問題,只是降低了我們業務表的體量,這部分慢查詢我們需要用到PolarDB的並行查詢優化

PolarDB MySQL 8.0重磅推出並行查詢框架,當您的查詢資料量到達一定閾值,就會自動啟動並行查詢框架,從而使查詢耗時指數級下降
在存儲層將資料分片到不同的線程上,多個線程並行計算,將結果管線匯總到總線程,最後總線程做些簡單歸回給用戶,提高查詢效率。
平行查詢(Parallel Query)利用多核心CPU的平行處理能力,以8核心32 GB配置為例,示意圖如下。

介紹MySQL大表優化方案

並行查詢適用於大部分SELECT語句,例如大表查詢、多表連接查詢、計算量較大的查詢。對於非常短的查詢,效果不太顯著。

並行查詢用法,使用Hint語法可以對單一語句進行控制,例如係統預設關閉並行查詢情況下,但需要對某個高頻的慢SQL查詢進行加速,此時就可以使用Hint對特定SQL進行加速。

SELECT / PARALLEL(x)/ … FROM …; – x >0

SELECT /* SET_VAR(max_parallel_degree=n) */ * FROM … // n > 0

查詢測試:資料庫配置16核心32G 單表資料量超3千萬

沒加並行查詢之前是4326ms,加了之後是525ms,效能提升8.24倍

介紹MySQL大表優化方案

介紹MySQL大表優化方案

五、互動式分析Hologre

大表慢查詢我們雖然用並行查詢優化提升了效率,但是一些特定的需求實時報表、實時大屏我們還是無法實現,只能依賴大數據去處理。
這裡推薦大家阿里雲的互動式分析Hologre(
https://help.aliyun.com/product/113622.html)

介紹MySQL大表優化方案

六、後記

千萬級大表優化是根據業務場景,以成本為代價優化的,不是一上來就資料庫水平切分擴展,這樣會給運維和業務帶來巨大挑戰,很多時候效果不一定好,我們的資料庫設計、索引最佳化、分錶策略是否做到位了,應該根據業務需求選擇合適的技術去實現。

更多相關免費學習推薦:mysql教學#(影片)

#

以上是介紹MySQL大表優化方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
您如何確定MySQL中的慢速查詢?您如何確定MySQL中的慢速查詢?Apr 26, 2025 am 12:15 AM

在MySQL中識別慢查詢可以通過啟用慢查詢日誌並設置閾值來實現。 1.啟用慢查詢日誌並設置閾值。 2.查看和分析慢查詢日誌文件,使用工具如mysqldumpslow或pt-query-digest進行深入分析。 3.優化慢查詢可以通過索引優化、查詢重寫和避免使用SELECT*來實現。

如何監視MySQL Server的健康和性能?如何監視MySQL Server的健康和性能?Apr 26, 2025 am 12:15 AM

要監控MySQL服務器的健康和性能,應關注系統健康、性能指標和查詢執行。 1)監控系統健康:使用top、htop或SHOWGLOBALSTATUS命令查看CPU、內存、磁盤I/O和網絡活動。 2)追踪性能指標:監控查詢每秒數、平均查詢時間和緩存命中率等關鍵指標。 3)確保查詢執行優化:啟用慢查詢日誌,記錄並優化執行時間超過設定閾值的查詢。

比較和對比Mysql和Mariadb。比較和對比Mysql和Mariadb。Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

MySQL的許可與其他數據庫系統相比如何?MySQL的許可與其他數據庫系統相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

您什麼時候選擇InnoDB而不是Myisam,反之亦然?您什麼時候選擇InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中解釋外鍵的目的。在MySQL中解釋外鍵的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有哪些不同類型的索引?MySQL中有哪些不同類型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

您如何在MySQL中創建索引?您如何在MySQL中創建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器