日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

淘宝商品库MySQL优化实践的学习

發布時間:2024/4/14 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 淘宝商品库MySQL优化实践的学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

淘寶商品庫MySQL優化實踐的學習

淘寶商品庫是淘寶網最核心的數據庫之一,采用MySQL主備集群的架構,特點是數據量大且增長速度快,讀多寫少,對安全性要求高,并發請求高。由于MySQL最初的設計不是用來存儲大規模數據的,但淘寶的數據量非常驚人,所以在I/O方面,尤其是CPU I/O層面會有很大瓶頸,因此淘寶的主要目標也是解決IO方面的瓶頸問題。

以下內容整理自淘寶的演講,演講內容包括淘寶商品庫硬件的選型決策,安全性和性能的平衡,特別是創新引入PCI-E Flash卡和Flashcache作為Cache提高IO性能,在保證安全性的前提下就包括MySQL、InnoDB引擎、文件系統、系統Page Cache、 IO調度算法、DM層(Flashcache)、Raid卡、設備驅動在內的整條IO路徑的Cache進行優化,進一步挖掘了系統IO的潛能,重點介紹優化過程中的一些經驗教訓、測量手段和工具。

一、商品庫項目背景介紹以及約束

淘寶的產品線很多,以淘寶的商品庫為例,商品庫是賣家賣的所有的商品信息數據庫。我們都知道淘寶商品是非常多的,有可能是十億級別的,而且淘寶每年的數據都會翻番,在淘寶上,由于賣家是非常活躍的,所以每天的交易數也是非常多的,而且每天的訪問量也是相當大的。更比如在一些高峰期,比如節假日,像光棍節促銷,當時一天的訪問量可就是平常的好幾倍,幾十倍的樣子。

商品庫(單機,測試)情況

  • 無復雜查詢,離散度高
  • 記錄數:1億條鍵值對
  • 記錄大小:100字節
  • 數據文件:170G
  • 訪問熱點情況:20%的鍵占用55%的訪問量
  • 鍵讀寫比例: 10:1

硬件選擇

  • 主機:?Dell; PowerEdge C2100;
  • 處理器:?physical = 2, cores = 12, virtual = 24
  • 內存: 96 G
  • RAID卡:LSI MegaSAS 9260/512MB Memory
  • PCI-E Flash卡: Fusion-io ioDrive 320GB/MLC
  • 硬盤: SEAGATE ST3300657SS??300G?x 12

軟件選擇

  • 發行版:?Red Hat Enterprise Linux Server release 5.4
  • 內核:?Kernel | 2.6.18-164.el5
  • 文件系統:Ext3
  • Flashcache: FB內部版本
  • MySQL 版本:? 5.1.48-log Source

二、技術要求和方案

1、商品庫技術要求:

  • 高可用,安全第一。因為淘寶賣家的商品都存在上面,一大堆數據,商品沒了,淘寶會非常的難受;
  • 高性能,性能平穩,性價比高。因為數據量大,而且未來增長的速度會非常快,以前系統是跑在Oracle的小機上面,它的成本是非常高的。現在改用高性能的PC服務器,性價比較高,而且Oracle數據庫的能力不足以維持淘寶的更新速度;
  • 控制運維風險。Oracle是有一套完整的工具,利用它們我們可隨時查看相關的狀態和預測它的一些變化。MySQL作為開源產品,這部分的功能稍顯欠缺,因此就需要根據運維團隊和DBA的需求去開發一些工具。
  • 2、調優指導思想

    • 杜絕拍腦袋,理論(源碼)指導+精確測量+效果驗證
    • 內存為王
    • 數據訪問規律導向,隨機數據和順序數據盡量分離
    • 盡量提高IO的利用率,減少無謂的IO能力浪費
    • 在安全性的前提下,盡可能的利用好系統各個層次cache

    3、技術方案

    • MySQL數據庫集群,數據水平切割,主從備份
    • 采用高性價比PC服務器,大內存,強勁CPU,可靠性高
    • 采用高性能PCI-E Flash卡作為cache,? 提高系統的IO性能
    • 充分利用系統各部件的cache, 大膽采用新技術
    • 充分考慮容災,在各個層面考慮數據的安全性

    4、調優工具

    • 源碼+emacs+大腦
    • 必備工具:systemtap、oprofile、latencytop 、blktrace/btt/seekwatcher、aspersa、tcprstat、sar、gdb
    • 自制工具:bash腳本、gnuplot腳本

    三、系統資源規劃

    內存分配:

    • MySQL
    • InnoDB buffer pool
    • OS pagecache
    • 驅動程序

    IO能力分配:

    • 讀能力,零散讀,提高IOPS
    • 寫能力,集中寫,提高吞吐量

    Cache分配:

    • MySQL內部cache
    • 匿名頁面/文件頁面
    • Flashcache 混合存儲
    • Raid卡內部cache

    1、MySQL數據庫

    考慮因素:

    • 主從備份帶來的性能影響
    • 復雜數據查詢操作是否需要預留內存以及上限
    • 數據備份dump對系統的影響,避免系統swap
    • 開啟binlog帶來的性能開銷
    • 限制最大鏈接數

    #############################

    • max_binlog_cache_size=2G
    • max_binlog_size = 500M
    • max_connections = 1020
    • max_user_connections=1000
    • query_cache_size = 30M

    2、InnoDB引擎

    考慮因素:

    • 盡可能大的BP(buffer pool)
    • 日志和數據分設備存儲
    • 離散數據走direct-IO,順序日志走buffered-IO
    • 減少臟頁的同步,提高命中率
    • 減少鎖對多核CPU性能的影響
    • 提高底層存儲默認的IO能力

    #############################

    • innodb_buffer_pool_size = 72G
    • innodb_flush_method = O_DIRECT
    • innodb_sync_spin_loops=0
    • innodb_log_group_home_dir = /u02/
    • innodb_io_capacity=2000
    • innodb_thread_concurrency = 64

    3、高速頁緩存

    考慮因素:

    • page資源傾斜給數據庫, 盡量不浪費,兼顧臨時內存申請
    • 避免NUMA架構帶來的zone內存分配不均而導致的swap現象
    • cache大部分由InnoDB日志產生,適時清除,限制page數量

    #############################

    • # numactl –interleave=all mysqld
    • # sysctl vm.drop_caches = 1
    • vm.swappiness = 0
    • vm.dirty_ratio = ?
    • vm.dirty_background_ratio =?
    • vm.pagecache = ?

    4、文件系統

    考慮因素(選擇):

    • Ext3/4
    • Xfs

    考慮因素(配置):

    • 減少元數據變化產生的IO
    • 對混合存儲系統友好
    • 關閉barrier

    #############################

    • /dev/mapper/cachedev? (rw,noatime,nodiratime,barrier=0) /u01
    • /dev/sda12???? ?? ?? ? ? ? ??? (rw,barrier=0)?????????????????? ? ??? ? ??? /u02

    5、IO調度

    考慮因素:

    • 調度算法對減少磁頭移動的效果
    • 關閉預讀
    • 設備隊列長度

    #############################

    • sda | [deadline]? 128
    • sdb | [deadline]? 128

    6、混合存儲(Flashcache)

    考慮因素

    • 結合磁盤的大容量,PCI-E Flash卡的高隨機讀寫性能優點
    • 數據盡可能多停留在PCI-E Flash卡上,提高讀寫命中率
    • 減少同步次數,保留磁盤的IO能力
    • 適時同步數據,減少安全風險

    #############################

    • dev.flashcache.dirty_thresh_pct = 90
    • dev.flashcache.cache_all = 0
    • dev.flashcache.fast_remove = 1
    • dev.flashcache.reclaim_policy = 1

    7、Raid卡

    考慮因素:

    • 邏輯分卷
    • Cache使用寫優先,讀少分配(數據無相關性效果不好)
    • 數據安全和raid level
    • 少預讀

    #############################

    • Controller |? LSI Logic / Symbios Logic LSI MegaSAS 9260 (rev 03)
    • Model | LSI MegaRAID SAS 9260-8i, PCIE interface, 8 ports
    • Cache | 512MB Memory, BBU Present
    • BBU | 95% Charged, Temperature 28C, isSOHGood=
    • VirtualDev Size????? RAID Level Disks SpnDpth Stripe Status? Cache
    • 0(no name) 278.875 GB 1 (1-0-0)????? 2???? 1-1???? 64 Optimal WB, RA
    • 1(no name) 1.361 TB? 1 (1-0-0)????? 2???? 5-5???? 64 Optimal WB, RA

    8、存儲設備驅動

    考慮因素:

    • 減少IO的抖動,提高IOPS
    • 提高壽命
    • 關閉或減少預讀

    #############################

    PCI-E Flash卡驅動:

    $cat /etc/modprobe.d/iomemory-vsl.conf

    • options iomemory-vsl use_workqueue=0
    • options iomemory-vsl disable-msi=0
    • options iomemory-vsl use_large_pcie_rx_buffer=1

    四、具體優化內容

    1、安全保證

    • Raid卡帶Flash,掉電保護,raid level10防止磁盤損害
    • PCI-E卡自身有日志系統,恢復時間最差10分鐘
    • Ext3文件系統帶日志保護
    • Flashcache上的cache數據最多24小時都會同步到SAS盤
    • 數據庫Innodb引擎本身有redo日志,數據安全校驗,高級別日志同步
    • MySQL主從備份
    • 商品庫應用方有事務日志

    2、性能保證

    解決IO瓶頸:

    • 高速PCI-E Flash卡做Cache,讀寫速度可達800/500M
    • 10?x SAS 300G 存放離散度高數據文件
    • 2?x SAS 300G 存放順序binlog和trx日志
    • 控制數據庫臟頁面的刷新頻率和強度
    • 優化操作系統的pagecache,資源傾斜, 杜絕swap發生
    • 優化文件系統減少meta數據的產生,以及寫入延遲
    • 優化IO調度器和預讀
    • 開啟raid卡的讀寫cache
    • 優化設備驅動,適應高強度的讀寫請求,減少jitter

    解決CPU瓶頸:

    • 業務上優化掉復雜查詢
    • 優化自旋鎖

    3、運維保證

    數據預熱:

    • 支持熱點數據每秒150M從磁盤直接加載到混合存儲
    • 數據庫重新啟動,無需重新預熱

    數據庫DDL 操作:

    • 控制數據表的大小,讓DDL時間可接受
    • 減少DDL對性能的沖擊

    混合存儲cache:

    • 通過設置白名單,減少諸如備份操作對cache的干擾
    • 混合存儲cache可管理

    五、優化成果

    經過優化從機器的運算能力上來看的話,比原來要高很多,從設備的總體的價格來看的話,相比原來小機的價格,現在的價格相當于原來的幾分之一。具體細節為:

    • 充足的容量規劃,可對抗突增業務,滿足未來幾年業務增長
    • 系統總體運行平穩,系統負載CPU util <50%,磁盤 util <10%,PCI-E Flash卡 util < 20%
    • QPS/36000,其中讀/32800,寫/3200
    • 請求平均延時時間:260微秒(包括網絡時間)
    • 掉電和操作系統失效的情況下,數據無丟失
    • 第一次預熱時間半個小時以內,之后只需幾分鐘

    六、一些重要討論問題的分享

    1、優化MySQL的過程中有沒有涉及到水平分片,或者垂直分片,大概的策略是什么?

    ?這塊因為之前的MySQL從業務的角度上我們已經優化過了。涉及到業務上的復雜SQL查詢,基本上都把它當成Key-Value來處理。所以說在水平切割上就變得非常簡單,只需要根據用戶的這些ID把它平均地分割到集群的各個機器上去即可,所以說這塊會做得非常簡單,也不會有那些非常復雜的SQL。

    ?2、淘寶在去Oracle化過程中,最終選擇了MySQL。是怎樣的原因使你沒有去選擇NoSQL或是其它技術來作為提高性能優化方面的考慮呢?

    主要考慮到以下這幾個方面,第一是因為MySQL已經是非常成熟的產品,而且也是經過大規模系統考驗的,所以它的穩定性,開發的便捷性還是比較有優勢的。從另外一個角度上來講,也能最大限度的保障歷史系統的遷移,這是第一個方面。此外,之所以沒有采用NoSQL主要基于以下幾個方面的考慮,第一由于市面上流行的NoSQL方案相對來說都比較年輕。然而對于淘寶商品庫來講,它是作為淘寶非常重要的庫,是不允許我們有絲毫閃失的,不能出現任何問題。第二點,現在流行的NoSQL方案,從程序的架構上來講,就是對傳統數據庫的過程進行了精簡。但是它的存儲、內存等問題其實還是存在的。只是解決問題的思路變得輕量。但是這些問題依舊在的。現在我們在數據庫層面,因為平常都是從引擎層面去開發,在原碼級別去做優化,甚至包括操作系統級的優化。所以我們可以很清楚的知道問題在哪里,應該解決什么問題,最終能達到什么樣的效果。那這樣做的好處就是我們既能解決問題,又能充分利用傳統數據庫的方便性以及穩定性。

    3、優化過程中具體還做了哪些工作?

    優化聽起來好像沒什么內容,但實際上我們做了很多的工作。首先要有明確的目標,我們的目標是什么,是為了提高性能還是提高安全性,還是提高其他的什么指標,這個目標要清晰和完整。第二點是測量,你不能說,我拍腦袋看到某某某,他怎么優化的,然后我也上去這樣照著優化,這不是我們做事的風格。我們要測量現在的瓶頸在哪里?我們的系統遇到了什么問題,這點我們會借助一些工具來實現。比如說測量CPU的使用,我們會非常精確的去測量I/O的使用,比如說在設備層面,I/O是怎么使用的,在軟件系統層面I/O是怎么使用的,在數據庫引擎層面I/O是怎么使用的。通過非常精細的測量,我們就能找出,對I/O使用不恰當的地方,然后就是要去解決這種問題,為什么會比設想的要多呢,或者為什么要比設想的要慢呢,我們會針對此類問題做理論上的分析,甚至會去翻翻源碼它到底是怎么實現的,這樣我們就可以比較有針對性將問題解決。

    4、優化過程中有哪些創新和亮點?

    這次有一個創新,用高速的SSD盤去做2級Cache,因為傳統的MySQL數據庫都是引擎里面發揮pool的功能,然后直接在軟件系統存儲。就是引擎里邊吐出來東西到那邊去,命不中東西從磁盤讀進去,由于是傳統的磁盤,所以它的尋道時間是非常長的。那它的I/O其實是不高的,但是吞吐量大。為了解決問題,我們采用一種叫PCI-E的Flash卡。這個卡的特點是,它是電子盤,所以它沒有尋道時間,隨機特性非常好,同時它的讀寫吞吐量非常高,讀能大概到1G,寫能達到幾百兆。采用其作為二級cache,數據從InnoDB引擎這邊出來,不到磁盤去,而是先寫到高速卡中。由于高速卡很快,它完成的I/O PS是微秒級的,幾十微秒就寫完了,然后傳統磁盤卻是十個毫秒級的。所以從數據庫引擎的角度來看,只需寫入幾十微妙就解決了。寫入數據開始是隨機的,隨機累計起來以后它就不是隨機的,我們通過把它排序,就可以使其變為順序的。然后我們再把這順序的數據利用磁盤的高吞吐量特點,由于數據庫半夜時候它可能會比較輕松。那這時候,把它導到磁盤中去,這樣就大大的提高整個系統的IO能力。這是比較大的一個創新點。

    轉載:http://www.aikaiyuan.com/1940.html

    轉載于:https://blog.51cto.com/laowafang/1119634

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的淘宝商品库MySQL优化实践的学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。