TOP

【轉】4G內存下MySQL修改配置文件以優化效率(來自discuz)
2019-08-20 16:35:27   字體:【 】  瀏覽:447次   評論:0

 摘要:公司網站訪問量越來越大,MySQL自然成為瓶頸,因此最近我一直在研究 MySQL 的優化,第一步自然想到的是 MySQL 系統參數的優化,作為一個訪問量很大的網站(日20萬人次以上)的數據庫。

在Apache, PHP, MySQL的體系架構中,MySQL對于性能的影響最大,也是關鍵的核心部分。對于Discuz!論壇程序也是如此,MySQL的設置是否合理優化,直接影響到論壇的速度和承載量!同時,MySQL也是優化難度最大的一個部分,不但需要理解一些MySQL專業知識,同時還需要長時間的觀察統計并且根據經驗進行判斷,然后設置合理的參數。 下面我們了解一下MySQL優化的一些基礎,MySQL的優化我分為兩個部分,一是服務器物理硬件的優化,二是MySQL自身(my.cnf)的優化。

一、服務器硬件對MySQL性能的影響

①磁盤尋道能力(磁盤I/O),以目前高轉速SCSI硬盤(7200轉/秒)為例,這種硬盤理論上每秒尋道7200次,這是物理特性決定的,沒有辦法改變。MySQL每秒鐘都在進行大量、復雜的查詢操作,對磁盤的讀寫量可想而知。所以,通常認為磁盤I/O是制約MySQL性能的最大因素之一,對于日均訪問量在100萬PV以上的Discuz!論壇,由于磁盤I/O的制約,MySQL的性能會非常低下!解決這一制約因素可以考慮以下幾種解決方案: 使用RAID-0+1磁盤陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁盤陣列上的效率不會像你期待的那樣快。

②CPU 對于MySQL應用,推薦使用S.M.P.架構的多路對稱CPU,例如:可以使用兩顆Intel Xeon 3.6GHz的CPU,現在我較推薦用4U的服務器來專門做數據庫服務器,不僅僅是針對于mysql。

③物理內存對于一臺使用MySQL的Database Server來說,服務器內存建議不要小于2GB,推薦使用4GB以上的物理內存,不過內存對于現在的服務器而言可以說是一個可以忽略的問題,工作中遇到了高端服務器基本上內存都超過了16G。

二、MySQL自身因素當解決了上述服務器硬件制約因素后,讓我們看看MySQL自身的優化是如何操作的。對MySQL自身的優化主要是對其配置文件my.cnf中的各項參數進行優化調整。下面我們介紹一些對性能影響較大的參數。 由于my.cnf文件的優化設置是與服務器硬件配置息息相關的,因而我們指定一個假想的服務器硬件環境:CPU: 2顆Intel Xeon 2.4GHz 內存: 4GB DDR 硬盤: SCSI 73GB(很常見的2U服務器)

下面,我們根據以上硬件配置結合一份已經優化好的my.cnf進行說明:

[mysqld] 
port = 3306 
serverid = 1 
socket = /tmp/mysql.sock 
skip-locking 
#避免MySQL的外部鎖定,減少出錯幾率增強穩定性。 
skip-name-resolve 
#禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
back_log = 384 
#back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。 如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自己的限制。 試圖設定back_log高于你的操作系統的限制將是無效的。默認值為50。對于Linux系統推薦設置為小于512的整數。
key_buffer_size = 256M 
#key_buffer_size指定用于索引的緩沖區大小,增加它可得到更好的索引處理性能。對于內存在4GB左右的服務器該參數可設置為256M或384M。注意:該參數值設置的過大反而會是服務器整體效率降低!
max_allowed_packet = 4M 
thread_stack = 256K 
table_cache = 128K 
sort_buffer_size = 6M 
#查詢排序時所能使用的緩沖區大小。注意:該參數對應的分配內存是每連接獨占,如果有100個連接,那么實際分配的總共排序緩沖區大小為100 × 6 = 600MB。所以,對于內存在4GB左右的服務器推薦設置為6-8M。
read_buffer_size = 4M 
#讀查詢操作所能使用的緩沖區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
join_buffer_size = 8M 
#聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
myisam_sort_buffer_size = 64M 
table_cache = 512 
thread_cache_size = 64 
query_cache_size = 64M 
#指定MySQL查詢緩沖區的大小。可以通過在MySQL控制臺觀察,如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖不夠的情況;如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會影響效率,那么可以考慮不用查詢緩沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區中碎片很多。
tmp_table_size = 256M 
max_connections = 768 
#指定MySQL允許的最大連接進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 10000000 
wait_timeout = 10 
#指定一個請求的最大連接時間,對于4GB左右內存的服務器可以設置為5-10。 
thread_concurrency = 8 
#該參數取值為服務器邏輯CPU數量*2,在本例中,服務器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實際取值為4*2=8
skip-networking 
#開啟該選項可以徹底關閉MySQL的TCP/IP連接方式,如果WEB服務器是以遠程連接的方式訪問MySQL數據庫服務器則不要開啟該選項!否則將無法正常連接!
table_cache=1024 
#物理內存越大,設置就越大.默認為2402,調到512-1024最佳 
innodb_additional_mem_pool_size=4M 
#默認為2M 
innodb_flush_log_at_trx_commit=1 
#設置為0就是等到innodb_log_buffer_size列隊滿后再統一儲存,默認為1 
innodb_log_buffer_size=2M 
#默認為1M 
innodb_thread_concurrency=8 
#你的服務器CPU有幾個就設置為幾,建議用默認一般為8 
key_buffer_size=256M 
#默認為218,調到128最佳 
tmp_table_size=64M 
#默認為16M,調到64-256最掛 
read_buffer_size=4M 
#默認為64K 
read_rnd_buffer_size=16M 
#默認為256K 
sort_buffer_size=32M 
#默認為256K 
thread_cache_size=120 
#默認為60 
query_cache_size=32M 

  

※值得注意的是: 

很多情況需要具體情況具體分析 

一、如果Key_reads太大,則應該把my.cnf中Key_buffer_size變大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。

二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。

 


Tags:內存 MySQL 修改 配置 文件 優化 效率 來自 discuz 責任編輯:如果有如果的話
】【打印繁體】【投稿】【收藏】 【推薦】【舉報】【評論】 【關閉】 【返回頂部
上一篇遠程讀取數據庫的寫法。 下一篇【轉】8G內存下MySQL的優化詳細方..

  • 問題事件名稱:APPCRASH應用程序名:httpd.exe應用程序版本:2.4.23.0應用程序時間戳:577703ab故障模塊名稱:ntdll.dll重新注冊Window動態庫就可以了。運行中輸入cmd,在命令提示符下輸入:for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1注意,是在命令提示符下,不是在“運行框”中!!環境變量在path中加入如下路徑,就好了D:\wamp\php..

  • 到php.ini配置文件里面找到 allow_url_fopen = On 把Off設置為On即可 語法:file_get_contents(path,include_path,context,start,max_length) file_get_contents() 函數把整個文件讀入一個字符串中。 和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。 file_get_contents() 函數是用于將文件的內容讀入到一個字符串中的首選方法。如果操作系統支持,還會使用..

  • 網站常見安全問題記錄(持續更新)Apache說明 初衷:本文檔用于記錄所遇到的網站安全問題,并分類匯總,方便后期遇到類似問題,能夠快速找到解決方案,提高效率,讓程序員有更多的時間去把妹,LOL...記錄規范:標題必須清晰明了,方便用戶快速查找,拒絕標題黨;問題放到正確的分類中;記錄問題的時候先闡述問題,再列出解決方法,盡量做到有圖有真相;如果有對應的資料,可以附..

  • $_SERVER 是PHP預定義的超全局變量。所謂“超全局變量”,即在腳本全部作用域中都可以使用,$_SERVER保存關于報頭、路徑和腳本位置的信息。工作中經常忘記,在此整理記錄下,加深印象。測試是在Windows下進行的,環境為Apache/2.4.23 (Win32)+PHP/5.6.27-nts,訪問域名為http://www.example.com/index....,文件目錄在E:/WWW/example/。主要內容詳解$_SERVER["SCRIPT_N..

  • 系統環境:Windows Server 2008 R2 + Sql Server 2008 R2 問題描述:Windows Server 2008 R2系統內存占用率過大,而在任務管理器中各進程內存占用總和都遠不到此占用率。相關現象:1. 內存占用率90%以上2. 任務管理器中所有進程內存和較低,遠不到90%,有二十多G的內存偏差 分析過程: 首先懷疑SQL&..

  • ALTER TABLE zysjyj DROP aid;ALTER TABLE zysjyj ADD aid int(10) NOT NULL FIRST;ALTER TABLE zysjyj AUTO_INCREMENT=10000;ALTER TABLE zysjyj MODIFY COLUMN aid int(10) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(aid);

-->

發布者

如果有如果的話 如果有如果的話
等級:普通會員
積分:0 個
性別:保密
rug@qq.com
42 身份還未認證 郵箱還未認證 手機還未認證 給它發送短消息 搜尋它在mysql發布的全部文章 38

最新文章

網站服務地區

昌都地區網站建設
昭通市網站建設
南京市網站建設
靜安區網站建設
朝陽市網站建設
萍鄉市網站建設
大理白族自治州網站建設
張掖市網站建設
百色市網站建設
邯鄲市網站建設
四平市網站建設
西安市網站建設
汕尾市網站建設
奉節縣網站建設
江門市網站建設
閔行區網站建設
豐臺區網站建設
陵水黎族自治縣網站建設
朔州市網站建設
遵義市網站建設
河東區網站建設
漳州市網站建設

本月熱門

相關文章

(★^O^★)MG呼噜噜爱上乡下怎么玩容易爆分 黑龙江6+1开奖结果查询表近100期 腾讯贵州麻将官方 1.16公牛vs 快乐12分析软件 东北用麻将摆王八怎么摆 网上棋牌平台哪个好 全民欢乐捕鱼辅助软件 云南福彩时时彩 广西十一选五前三直走四 贵州快3今日预测出号分析 中国福利彩票幸运农场 爱玩棋牌手机游戏大厅 明星三缺一麻将免费版 微乐河南麻将怎么老是输 老鹰vs魔术 上海11选5什么时候开