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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000

發布時間:2023/12/19 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近2周時間, 對于MYSQL 5.5.15-log Windows XP版本,進行了各種測試和優化。目前mysql的許多單表數據已經超過了1億條記錄,MYSQL在經過各種優化后,處理上億條記錄非常輕松,性能遠比想象的要好的多。

目前, 硬件情況是 intel Q9300 CPU 2.5G 4核心 775針的老CPU, 內存是2.6G DDR2, 硬盤是5900轉2T的希捷節能硬盤, 都是很普通廉價的硬件。

MYSQL的各數據表全部采用innodb引擎,開始使用autocommit, 相當于每一條語句都提交,測試的QPS是:單機2.4萬qps,后來修改為取消autocommit, 并且修改代碼,緩存了部分中間數據,大幅度減少了一些重復簡單的SELECT的命令數量,并且多條記錄一次性提交,測試情況是大約 5000 QPS,實際上5000 QPS的等效性能更好一些,因為基本上都是insert和update命令。

中間還測試了memory引擎,定時也測試過,隨時插入memory, 定時從memory寫到innodb,想這樣實現更高的性能,思路是利用內存數據庫的高性能,結果不理想, 本來想將insert先插入到memory引擎緩沖,結果,非常失望,memory引擎的并發能力非常有限,偶然會出現插入錯誤,只好取消了這個思路。 現在看memory引擎的表鎖,有時不能給其他進程等待的機會,對于我的應用,本來的思路是先緩沖到memory引擎,滿1000條記錄,再集中插入innodb, 定時時間設置為30秒,60秒,300秒測試都一樣,一旦從memory向innodb寫記錄,基本其他進程的insert Memory就可能失敗,期望是有一個等待的機會,實際測試不行,即使只有幾百條記錄的緩沖也會鎖死, 結果,出現部分插入失敗,寫入log日志中, 其它進程不能得到應該容忍的等待時間,問題在哪里, 估計是memory只使用表鎖,造成的問題。 總之,這個思路受困于Memory差勁的并發能力。

主要的優化:

# 設定默認的事務隔離級別.可用的級別如下:

# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE

# 默認是REPEATABLE_READ,? 查看你的程序是否可以運行在READ-COMMITED 隔離模式下,如果可以,

# 這個選項有一些性能的優勢,特別是在5.0,5.1版和行級別的復制方面.

# 設置隔離等級, 默認是REPEATABLE-READ

transaction_isolation=READ-COMMITTED

#*** INNODB Specific options ***

innodb_use_sys_malloc =0

# 系統默認 innodb_use_sys_malloc =1, 表示使用操作系統自帶的,

#*** INNODB Specific options ***

innodb_use_sys_malloc =0

# 系統默認 innodb_use_sys_malloc =1, 表示使用操作系統自帶的,

innodb_data_home_dir????? = "E:/mysql/data/"

innodb_data_file_path=ibdata1:20G

innodb_log_group_home_dir = "R:/"

# 設置log文件到虛擬內存盤中去,這樣可以提高性能,同時設置innodb_fast_shutdown=0,

# 可以保證關機前數據全部保存到硬盤,這個是最牛的設置,這樣等于REDO日志的性能和內存是一樣快的。

#innodb_log_arch_dir????? = "C:/mysqllog/"

innodb_log_files_in_group=2

innodb_autoextend_increment = 32

innodb_additional_mem_pool_size=8M

innodb_flush_log_at_trx_commit=2

innodb_log_buffer_size=1M

innodb_buffer_pool_size=640M

innodb_log_file_size=63M

innodb_file_io_threads=4

# InnoDB 中的文件 I/O 線程。 通常設置為 4,

# 但是在 Windows 下可以設定一個更大的值以提高磁盤 I/O。

innodb_max_dirty_pages_pct=75

# 默認為75%, 感覺太高了點,以前的默認值更高位90.

innodb_fast_shutdown=0

# 默認為允許快速關閉=1, innodb_fast_shutdown影響著innodb表的行為,該參數可設置為0,1,2

#0 表示當MySQL關閉時,InnoDB需要完成所有的full purge和merge insert buffer操作。耗時比較長。

#1 是默認值。表示不需要完成full purge和merge insert buffer操作,但是在緩沖池中的一些數據臟頁會刷新到磁盤。

#2 不完成full purge和merge insert buffer操作,不將緩沖池中的數據臟頁寫回到磁盤,將日志寫入到日志文件。MySQL下次啟動執行恢復操作。

# close double write, 默認是打開的

# innodb_doublewrite=0

# 不關閉校驗和檢查(提供更好的性能)

# innodb_checksums=0

# 不打開單表空間

#innodb_file_per_table = 0

innodb_io_capacity=100

innodb_read_io_threads=1

innodb_open_files=300

innodb_max_purge_lag=2000000

#innodb_import_table_from_xtrabackup=1

innodb_support_xa=0

##如果使用復制, 那么一定要innodb_support_xa=1, 即默認參數

innodb_thread_sleep_delay=40

設置thread延遲sleep時間為40微秒,默認為10000,這個我與默認參數的分歧很大。

innodb_thread_concurrency=4

# InnoDB 會試圖將 InnoDB 服務的使用的操作系統進程小于或等于這里所設定的數值。

# 此參數默認值為 8。如果計算機系統性能較低或 innodb_monitor 顯示有很多線程等侍信號,

# 應該將這個值設小一點。如果你的計算機系統有很多處理器與磁盤系統,則可以將這個值設高一點以充分利用你的系統資源。建議設值為(處理器數目+ 磁盤數目)*2。默認是建議設置為10,我設置為4,這個經過測試,對于本機同時跑20個spider進程的情況下,設置為4的性能最好。

[mysqldump]

# 不要在將內存中的整個結果寫入磁盤之前緩存. 在導出非常巨大的表時需要此項

quick

max_allowed_packet = 16M

最后修改于 2012-07-01 23:45

閱讀(?)評論(0)

總結

以上是生活随笔為你收集整理的mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000的全部內容,希望文章能夠幫你解決所遇到的問題。

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