久久机这里只有精品,国产69精品一区二区亚洲孕妇,91精品国产综合久久婷婷香蕉,午夜久久久久久电影

最新活動(dòng):電腦PC端+手機(jī)端+微網(wǎng)站+自適應(yīng)網(wǎng)頁(yè)多模板選擇-建站388元起價(jià)!!!
當(dāng)前位置:主頁(yè) > SEO優(yōu)化 > 源碼庫(kù)實(shí)例分析MySQL優(yōu)化方法SEO優(yōu)化

源碼庫(kù)實(shí)例分析MySQL優(yōu)化方法SEO優(yōu)化

時(shí)間:2023-05-24 09:05:24 閱讀: 文章分類: SEO優(yōu)化 作者: 網(wǎng)站編輯員

導(dǎo)讀:2SEO優(yōu)化在Apache, PHP, MySQL的體系架構(gòu)中,MySQL對(duì)于性能的影響最大,也是關(guān)鍵的核心部分。對(duì)于Discuz!論壇程序也是如此,MySQL的設(shè)置是否合營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站建設(shè)教程。

營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站建設(shè)教程在Apache, PHP, MySQL的體系架構(gòu)中,MySQL對(duì)于性能的影響最大,也是關(guān)鍵的核心部分。對(duì)于Discuz!論壇程序也是如此,MySQL的設(shè)置是否合理優(yōu)化,直接影響到論壇的速度和承載量!同時(shí),MySQL也是優(yōu)化難度最大的一個(gè)部分,不但需要理解一些MySQL專業(yè)知識(shí),同時(shí)還需要長(zhǎng)時(shí)間的觀察統(tǒng)計(jì)并且根據(jù)經(jīng)驗(yàn)進(jìn)行判斷,然后設(shè)置合理的參數(shù)。   下面我們了解一下MySQL優(yōu)化的一些基礎(chǔ),MySQL的優(yōu)化我分為兩個(gè)部分,一是服務(wù)器物理硬件的優(yōu)化;二是MySQL編譯安裝時(shí)的優(yōu)化和自身(my.cnf)配置文件的優(yōu)化。   (1) 服務(wù)器硬件對(duì)MySQL性能的影響   a) 磁盤尋道能力(磁盤I/O),以目前高轉(zhuǎn)速SCSI硬盤(7200轉(zhuǎn)/秒)為例,這種硬盤理論上每秒尋道7200次,這是物理特性決定的,沒(méi)有辦法改變。MySQL每秒鐘都在進(jìn)行大量、復(fù)雜的查詢操作,對(duì)磁盤的讀寫(xiě)量可想而知。所以,通常認(rèn)為磁盤I/O是制約MySQL性能的最大因素之一,對(duì)于日均訪問(wèn)量在100萬(wàn)PV以上的Discuz!論壇,由于磁盤I/O的制約,MySQL的性能會(huì)非常低下!解決這一制約因素可以考慮以下幾種解決方案:   使用RAID-0+1磁盤陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁盤陣列上的效率不會(huì)像你期待的那樣快; 拋棄傳統(tǒng)的硬盤,使用速度更快的閃存式存儲(chǔ)設(shè)備。經(jīng)過(guò)Discuz!公司技術(shù)工程的測(cè)試,使用閃存式存儲(chǔ)設(shè)備可比傳統(tǒng)硬盤速度高出6-10倍左右。   b) CPU 對(duì)于MySQL應(yīng)用,推薦使用S.M.P.架構(gòu)的多路對(duì)稱CPU,例如:可以使用兩顆Intel Xeon 3.6GHz的CPU。   c) 物理內(nèi)存對(duì)于一臺(tái)使用MySQL的Database Server來(lái)說(shuō),服務(wù)器內(nèi)存建議不要小于2GB,推薦使用4GB以上的物理內(nèi)存。   (2) MySQL自身因素當(dāng)解決了上述服務(wù)器硬件制約因素后,讓我們看看MySQL自身的優(yōu)化是如何操作的。對(duì)MySQL自身的優(yōu)化主要是對(duì)其源碼編譯和配置文件my.cnf中的各項(xiàng)參數(shù)進(jìn)行優(yōu)化調(diào)整。下面我們介紹一些對(duì)性能影響較大的參數(shù)。   a)mysql源碼編譯時(shí)的優(yōu)化:   1. -static 13%    --with-client-ldflags=-all-static    --with-mysqld-ldflags=-all-static 靜態(tài)鏈接提高13%性能   2. -pgcc 1%    CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \     CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \     -felide-constructors -fno-exceptions -fno-rtti" 如果是Inter處理器,使用pgcc提高1%性能   3. Unix Socket 7.5%    --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock 使用unix套接字鏈接提高7.5%性能,所以在windows下mysql性能肯定不如unix下面   4. --enable-assembler 允許使用匯編模式(優(yōu)化性能)   編譯代碼: CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp" ./configure --prefix=/usr/local/mysql --enable-assembler --with-innodb --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all   b)由于my.cnf文件的優(yōu)化設(shè)置是與服務(wù)器硬件配置息息相關(guān)的,因而我們指定一個(gè)假想的服務(wù)器硬件環(huán)境:   CPU: 2顆Intel Xeon 2.4GHz   內(nèi)存: 4GB DDR   硬盤: SCSI 73GB   下面,我們根據(jù)以上硬件配置結(jié)合一份已經(jīng)優(yōu)化好的my.cnf進(jìn)行說(shuō)明:   # vi /etc/my.cnf 以下只列出my.cnf文件中[mysqld]段落中的內(nèi)容,其他段落內(nèi)容對(duì)MySQL運(yùn)行性能影響甚微,因而姑且忽略。   [mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking # 避免MySQL的外部鎖定,減少出錯(cuò)幾率增強(qiáng)穩(wěn)定性。 skip-name-resolve #禁止MySQL對(duì)外部連接進(jìn)行DNS解析,使用這一選項(xiàng)可以消除MySQL進(jìn)行DNS解析的時(shí)間。但需要注意,如果開(kāi)啟該選項(xiàng),則所有遠(yuǎn)程主機(jī)連接授權(quán)都要使用IP地址方式,否則MySQL將無(wú)法正常處理連接請(qǐng)求!   back_log = 384 指定MySQL可能的連接數(shù)量。當(dāng)MySQL主線程在很短的時(shí)間內(nèi)接收到非常多的連接請(qǐng)求,該參數(shù)生效,主線程花費(fèi)很短的時(shí)間檢查連接并且啟動(dòng)一個(gè)新線程。 back_log參數(shù)的值指出在MySQL暫時(shí)停止響應(yīng)新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。 如果系統(tǒng)在一個(gè)短時(shí)間內(nèi)有很多連接,則需要增大該參數(shù)的值,該參數(shù)值指定到來(lái)的TCP/IP連接的偵聽(tīng)隊(duì)列的大小。不同的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。 試圖設(shè)定back_log高于你的操作系統(tǒng)的限制將是無(wú)效的。默認(rèn)值為50。對(duì)于Linux系統(tǒng)推薦設(shè)置為小于512的整數(shù)。   key_buffer_size = 32M # key_buffer_size這對(duì)MyISAM表來(lái)說(shuō)非常重要。如果只是使用MyISAM表,可以把它設(shè)置為可用內(nèi)存的 30-40%。合理的值取決于索引大小、數(shù)據(jù)量以及負(fù)載 -- 記住,MyISAM表會(huì)使用操作系統(tǒng)的緩存來(lái)緩存數(shù)據(jù),因此需要留出部分內(nèi)存給它們,很多情況下數(shù)據(jù)比索引大多了。盡管如此,需要總是檢查是否所有的 key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 卻設(shè)置為 4GB 的情況是非常少的。這么做太浪費(fèi)了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的key_buffer_size 以適應(yīng)給予磁盤的臨時(shí)表索引所需。   innodb_buffer_pool_size = 2.4G #這對(duì)Innodb表來(lái)說(shuō)非常重要。Innodb相比MyISAM表對(duì)緩沖更為敏感。MyISAM可以在默認(rèn)的 key_buffer_size 設(shè)置下運(yùn)行的可以,然而Innodb在默認(rèn)的innodb_buffer_pool_size 設(shè)置下卻跟蝸牛似的。由于Innodb把數(shù)據(jù)和索引都緩存起來(lái),無(wú)需留給操作系統(tǒng)太多的內(nèi)存,因此如果只需要用Innodb的話則可以設(shè)置它高達(dá) 70-80% 的可用內(nèi)存。-- 如果你的數(shù)據(jù)量不大,并且不會(huì)暴增,那么無(wú)需把innodb_buffer_pool_size 設(shè)置的太大了。   innodb_additional_pool_size = 20M #這個(gè)選項(xiàng)對(duì)性能影響并不太多,至少在有差不多足夠內(nèi)存可分配的操作系統(tǒng)上是這樣。不過(guò)如果你仍然想設(shè)置為 20MB(或者更大),因此就需要看一下Innodb其他需要分配的內(nèi)存有多少。   innodb_log_file_size = 512M #在高寫(xiě)入負(fù)載尤其是大數(shù)據(jù)集的情況下很重要。這個(gè)值越大則性能相對(duì)越高,但是要注意到可能會(huì)增加恢復(fù)時(shí)間。我經(jīng)常設(shè)置為64-512MB,根據(jù)服務(wù)器大小而異。   innodb_log_buffer_size =16M #默認(rèn)的設(shè)置在中等強(qiáng)度寫(xiě)入負(fù)載以及較短事務(wù)的情況下,服務(wù)器性能還可以。如果存在更新操作峰值或者負(fù)載較大,就應(yīng)該考慮加大它的值了。如果它的值設(shè)置太高了,可能會(huì)浪費(fèi)內(nèi)存 -- 它每秒都會(huì)刷新一次,因此無(wú)需設(shè)置超過(guò)1秒所需的內(nèi)存空間。通常8-16MB就足夠了。越小的系統(tǒng)它的值越小。   innodb_flush_logs_at_trx_commit = 2 #是否為Innodb比MyISAM慢1000倍而頭大?看來(lái)也許你忘了修改這個(gè)參數(shù)了。默認(rèn)值是 1,這意味著每次提交的更新事務(wù)(或者每個(gè)事務(wù)之外的語(yǔ)句)都會(huì)刷新到磁盤中,而這相當(dāng)耗費(fèi)資源,尤其是沒(méi)有電池備用緩存時(shí)。很多應(yīng)用程序,尤其是從 MyISAM轉(zhuǎn)變過(guò)來(lái)的那些,把它的值設(shè)置為 2 就可以了,也就是不把日志刷新到磁盤上,而只刷新到操作系統(tǒng)的緩存上。日志仍然會(huì)每秒刷新到磁盤中去,因此通常不會(huì)丟失每秒1-2次更新的消耗。如果設(shè)置為0就快很多了,不過(guò)也相對(duì)不安全了 -- MySQL服務(wù)器崩潰時(shí)就會(huì)丟失一些事務(wù)。設(shè)置為2指揮丟失刷新到操作系統(tǒng)緩存的那部分事務(wù)。   max_allowed_packet = 4M thread_stack = 256K table_cache = 128K sort_buffer_size = 6M #查詢排序時(shí)所能使用的緩沖區(qū)大小。注意:該參數(shù)對(duì)應(yīng)的分配內(nèi)存是每連接獨(dú)占!如果有100個(gè)連接,那么實(shí)際分配的總共排序緩沖區(qū)大小為100 × 6 = 600MB。所以,對(duì)于內(nèi)存在4GB左右的服務(wù)器推薦設(shè)置為6-8M。   read_buffer_size = 4M #讀查詢操作所能使用的緩沖區(qū)大小。和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!   join_buffer_size = 8M #聯(lián)合查詢操作所能使用的緩沖區(qū)大小,和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!   myisam_sort_buffer_size = 64M table_cache = 512 #打開(kāi)一個(gè)表的開(kāi)銷可能很大。例如MyISAM把MYI文件頭標(biāo)志該表正在使用中。你肯定不希望這種操作太頻繁,所以通常要加大緩存數(shù)量,使得足以最大限度地緩存打開(kāi)的表。它需要用到操作系統(tǒng)的資源以及內(nèi)存,對(duì)當(dāng)前的硬件配置來(lái)說(shuō)當(dāng)然不是什么問(wèn)題了。如果你有200多個(gè)表的話,那么設(shè)置為 1024 也許比較合適(每個(gè)線程都需要打開(kāi)表),如果連接數(shù)比較大那么就加大它的值。我曾經(jīng)見(jiàn)過(guò)設(shè)置為100,000的情況。   thread_cache_size = 64 #線程的創(chuàng)建和銷毀的開(kāi)銷可能很大,因?yàn)槊總€(gè)線程的連接/斷開(kāi)都需要。我通常至少設(shè)置為 16。如果應(yīng)用程序中有大量的跳躍并發(fā)連接并且 Threads_Created 的值也比較大,那么我就會(huì)加大它的值。它的目的是在通常網(wǎng)站建設(shè)哪家好的操作中無(wú)需創(chuàng)建新線程。   query_cache_size = 64M #指定MySQL查詢緩沖區(qū)的大小。可以通過(guò)在MySQL控制臺(tái)執(zhí)行以下命令觀察:   # > SHOW VARIABLES LIKE '%query_cache%'; # > SHOW STATUS LIKE 'Qcache%'; # 如果Qcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況;如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會(huì)影響效率,那么可以考慮不用查詢緩沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區(qū)中碎片很多。   tmp_table_size = 256M max_connections = 768 #指定MySQL允許的最大連接進(jìn)程數(shù)。如果在訪問(wèn)論壇時(shí)經(jīng)常出現(xiàn)Too Many Connections的錯(cuò)誤提 示,則需要增大該參數(shù)值。   max_connect_errors = 10000000 wait_timeout = 10 #指定一個(gè)請(qǐng)求的最大連接時(shí)間,對(duì)于4GB左右內(nèi)存的服務(wù)器可以設(shè)置為5-10。   thread_concurrency = 8 #該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量×2,在本例中,服務(wù)器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實(shí)際取值為4 × 2 = 8   skip-networking #開(kāi)啟該選項(xiàng)可以徹底關(guān)閉MySQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠(yuǎn)程連接的方式訪問(wèn)MySQL數(shù)據(jù)庫(kù)服務(wù)器則不要開(kāi)啟該選項(xiàng)!否則將無(wú)法正常連接!   show status 命令 含義如下: aborted_clients 客戶端非法中斷連接次數(shù) aborted_connects 連接mysql失敗次數(shù) com_xxx xxx命令執(zhí)行次數(shù),有很多條 connections 連接mysql的數(shù)量 Created_tmp_disk_tables 在磁盤上創(chuàng)建的臨時(shí)表 Created_tmp_tables 在內(nèi)存里創(chuàng)建的臨時(shí)表 Created_tmp_files 臨時(shí)文件數(shù) Key_read_requests The number of requests to read a key block from the cache Key_reads The number of physical reads of a key block from disk Max_used_connections 同時(shí)使用的連接數(shù) Open_tables 開(kāi)放的表 Open_files 開(kāi)放的文件 Opened_tables 打開(kāi)的表 Questions 提交到server的查詢數(shù) Sort_merge_passes 如果這個(gè)值很大,應(yīng)該增加my.cnf中的sort_buffer值 Uptime 服務(wù)器已經(jīng)工作的秒數(shù)   提升性能的建議: 1.如果opened_tables太大,應(yīng)該把my.cnf中的table_cache變大 2.如果Key_reads太大,則應(yīng)該把my.cnf中key_buffer_size變大.可以用Key_reads/K網(wǎng)站建設(shè)制作ey_read_req建設(shè)網(wǎng)站uests計(jì)算出cache失敗率 3.如果Handler_read_rnd太大,則你寫(xiě)的SQL語(yǔ)句里很多查詢都是要掃描整個(gè)表,而沒(méi)有發(fā)揮索引的鍵的作用 4.如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections計(jì)算cache命中率 5.如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于內(nèi)存的臨時(shí)表代替基于磁盤的相關(guān)營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站建設(shè)教程。

關(guān)鍵詞標(biāo)簽: 實(shí)例 標(biāo)簽 SQL

聲明: 本文由我的SEOUC技術(shù)文章主頁(yè)發(fā)布于:2023-05-24 ,文章源碼庫(kù)實(shí)例分析MySQL優(yōu)化方法SEO優(yōu)化主要講述實(shí)例,標(biāo)簽,SQL網(wǎng)站建設(shè)源碼以及服務(wù)器配置搭建相關(guān)技術(shù)文章。轉(zhuǎn)載請(qǐng)保留鏈接: http://www.bifwcx.com/article/seo_6582.html

我的IDC 網(wǎng)站建設(shè)技術(shù)SEOUC.COM
專注網(wǎng)站建設(shè),SEO優(yōu)化,小程序設(shè)計(jì)制作搭建開(kāi)發(fā)定制網(wǎng)站等,數(shù)千家網(wǎng)站定制開(kāi)發(fā)案例,網(wǎng)站推廣技術(shù)服務(wù)。
  • 5000+合作客服
  • 8年從業(yè)經(jīng)驗(yàn)
  • 150+覆蓋行業(yè)
  • 最新熱門源碼技術(shù)文章

    主站蜘蛛池模板: 新乡县| 华坪县| 佛坪县| 辽源市| 尤溪县| 肇州县| 房山区| 当阳市| 孟连| 平舆县| 朔州市| 山丹县| 蛟河市| 台南市| 章丘市| 贵德县| 锦州市| 惠东县| 平远县| 武冈市| 大邑县| 健康| 越西县| 邛崃市| 庄浪县| 澜沧| 江华| 宁晋县| 曲周县| 阳城县| 永靖县| 镇安县| 正安县| 仙居县| 杂多县| 易门县| 郯城县| 昔阳县| 汨罗市| 桑日县| 南涧|