<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    恩達

    可愛的兒子--陽陽坨

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      43 隨筆 :: 14 文章 :: 55 評論 :: 0 Trackbacks

    原文作者: Peter Zaitsev
    原文來源: http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation
    譯者:葉金榮(Email:),轉載請注明譯者和出處,并且不能用于商業用途,違者必究。

    My favorite question during Interview for people to work as MySQL DBAs or be involved with MySQL Performance in some way is to ask them what should be tuned in MySQL Server straight after installation, assuming it was installed with default settings.

    在面試MySQL DBA或者那些打算做MySQL性能優化的人時,我最喜歡問題是:MySQL服務器按照默認設置安裝完之后,應該做哪些方面的調節呢?

    I’m surprised how many people fail to provide any reasonable answer to this question, and how many servers are where in wild which are running with default settings.

    令我很驚訝的是,有多少人對這個問題無法給出合理的答案,又有多少服務器都運行在默認的設置下。

    Even though you can tune quite a lot of variables in MySQL Servers only few of them are really important for most common workload. After you get these settings right other changes will most commonly offer only incremental performance improvements.

    盡管你可以調節很多MySQL服務器上的變量,但是在大多數通常的工作負載下,只有少數幾個才真正重要。如果你把這些變量設置正確了,那么修改其他變量最多只能對系統性能改善有一定提升。

    key_buffer_size - Very important if you use MyISAM tables. Set up to 30-40% of available memory if you use MyISAM tables exclusively. Right size depends on amount of indexes, data size and workload - remember MyISAM uses OS cache to cache the data so you need to leave memory for it as well, and data can be much larger than indexes in many cases. Check however if all of key_buffer is used over time - it is not rare to see key_buffer being set to 4G while combined size of .MYI files is just 1GB. This would be just a waste. If you use few MyISAM tables you’ll want to keep it lower but still at least 16-32Mb so it is large enough to accommodate indexes for temporary tables which are created on disk.

    key_buffer_size - 這對MyISAM表來說非常重要。如果只是使用MyISAM表,可以把它設置為可用內存的 30-40%。合理的值取決于索引大小、數據量以及負載 -- 記住,MyISAM表會使用操作系統的緩存來緩存數據,因此需要留出部分內存給它們,很多情況下數據比索引大多了。盡管如此,需要總是檢查是否所有的 key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 卻設置為 4GB 的情況是非常少的。這么做太浪費了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size 以適應給予磁盤的臨時表索引所需。

    innodb_buffer_pool_size This is very important variable to tune if you’re using Innodb tables. Innodb tables are much more sensitive to buffer size compared to MyISAM. MyISAM may work kind of OK with default key_buffer_size even with large data set but it will crawl with default innodb_buffer_pool_size. Also Innodb buffer pool caches both data and index pages so you do not need to leave space for OS cache so values up to 70-80% of memory often make sense for Innodb only installations. Same rules as for key_buffer apply - if you have small data set and it is not going to grow dramatically do not oversize innodb_buffer_pool_size you might find better use for memory available.

    innodb_buffer_pool_size - 這對Innodb表來說非常重要。Innodb相比MyISAM表對緩沖更為敏感。MyISAM可以在默認的 key_buffer_size 設置下運行的可以,然而Innodb在默認的 innodb_buffer_pool_size 設置下卻跟蝸牛似的。由于Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的話則可以設置它高達 70-80% 的可用內存。一些應用于 key_buffer 的規則有 -- 如果你的數據量不大,并且不會暴增,那么無需把 innodb_buffer_pool_size 設置的太大了。

    innodb_additional_pool_size This one does not really affect performance too much, at least on OS with decent memory allocators. Still you might want to have it 20MB (sometimes larger) so you can see how much memory Innodb allocates for misc needs.

    innodb_additional_pool_size - 這個選項對性能影響并不太多,至少在有差不多足夠內存可分配的操作系統上是這樣。不過如果你仍然想設置為 20MB(或者更大),因此就需要看一下Innodb其他需要分配的內存有多少。

    innodb_log_file_size Very important for write intensive workloads especially for large data sets. Larger sizes offer better performance but increase recovery times so be careful. I normally use values 64M-512M depending on server size.

    innodb_log_file_size 在高寫入負載尤其是大數據集的情況下很重要。這個值越大則性能相對越高,但是要注意到可能會增加恢復時間。我經常設置為 64-512MB,跟據服務器大小而異。

    innodb_log_buffer_size Default for this one is kind of OK for many workloads with medium write load and shorter transactions. If you have update activity spikes however or work with blobs a lot you might want to increase it. Do not set it too high however as it would be waste of memory - it is flushed every 1 sec anyway so you do not need space for more than 1 sec worth of updates. 8MB-16MB are typically enough. Smaller installations should use smaller values.

    innodb_log_buffer_size 默認的設置在中等強度寫入負載以及較短事務的情況下,服務器性能還可以。如果存在更新操作峰值或者負載較大,就應該考慮加大它的值了。如果它的值設置太高了,可能會浪費內存 -- 它每秒都會刷新一次,因此無需設置超過1秒所需的內存空間。通常 8-16MB 就足夠了。越小的系統它的值越小。

    innodb_flush_logs_at_trx_commit Crying about Innodb being 100 times slower than MyISAM ? You probably forgot to adjust this value. Default value of 1 will mean each update transaction commit (or each statement outside of transaction) will need to flush log to the disk which is rather expensive, especially if you do not have Battery backed up cache. Many applications, especially those moved from MyISAM tables are OK with value 2 which means do not flush log to the disk but only flush it to OS cache. The log is still flushed to the disk each second so you normally would not loose more than 1-2 sec worth of updates. Value 0 is a bit faster but is a bit less secure as you can lose transactions even in case MySQL Server crashes. Value 2 only cause data loss with full OS crash.

    innodb_flush_logs_at_trx_commit 是否為Innodb比MyISAM慢1000倍而頭大?看來也許你忘了修改這個參數了。默認值是 1,這意味著每次提交的更新事務(或者每個事務之外的語句)都會刷新到磁盤中,而這相當耗費資源,尤其是沒有電池備用緩存時。很多應用程序,尤其是從 MyISAM轉變過來的那些,把它的值設置為 2 就可以了,也就是不把日志刷新到磁盤上,而只刷新到操作系統的緩存上。日志仍然會每秒刷新到磁盤中去,因此通常不會丟失每秒1-2次更新的消耗。如果設置為 0 就快很多了,不過也相對不安全了 -- MySQL服務器崩潰時就會丟失一些事務。設置為 2 指揮丟失刷新到操作系統緩存的那部分事務。

    table_cache - Opening tables can be expensive. For example MyISAM tables mark MYI header to mark table as currently in use. You do not want this to happen so frequently and it is typically best to size your cache so it is large enough to keep most of your tables open. It uses some OS resources and some memory but for modern hardware it is typically not the problem. 1024 is good value for applications with couple hundreds tables (remember each connection needs its own entry) if you have many connections or many tables increase it larger. I’ve seen values over 100.000 used.

    table_cache -- 打開一個表的開銷可能很大。例如MyISAM把MYI文件頭標志該表正在使用中。你肯定不希望這種操作太頻繁,所以通常要加大緩存數量,使得足以最大限度地緩存打開的表。它需要用到操作系統的資源以及內存,對當前的硬件配置來說當然不是什么問題了。如果你有200多個表的話,那么設置為 1024 也許比較合適(每個線程都需要打開表),如果連接數比較大那么就加大它的值。我曾經見過設置為 100,000 的情況。

    thread_cache Thread creation/destructions can be expensive, which happen at each connect/disconnect. I normally set this value to at least 16. If application has large jumps in amount of concurrent connections and I see fast growth of
    Threads_Created variable I boost it higher. The goal is not to have threads created in normal operation.

    thread_cache -- 線程的創建和銷毀的開銷可能很大,因為每個線程的連接/斷開都需要。我通常至少設置為 16。如果應用程序中有大量的跳躍并發連接并且 Threads_Created 的值也比較大,那么我就會加大它的值。它的目的是在通常的操作中無需創建新線程。

    query_cache If your application is read intensive and you do not have application level caches this can be great help. Do not set it too large as it may slow things down as its maintenance may get expensive. Values from 32M to 512M normally make sense. Check it however after a while and see if it is well used. For certain workloads cache hit ratio is lower than would justify having it enabled.

    query_cache -- 如果你的應用程序有大量讀,而且沒有應用程序級別的緩存,那么這很有用。不要把它設置太大了,因為想要維護它也需要不少開銷,這會導致MySQL變慢。通常設置為 32-512Mb。設置完之后最好是跟蹤一段時間,查看是否運行良好。在一定的負載壓力下,如果緩存命中率太低了,就啟用它。

    Note: as you can see all of these are global variables. These variables depend on hardware and mix of storage engines, while per session variables are typically workload specific. If you have simple queries there is no reason to increase sort_buffer_size even if you have 64GB of memory to waste. Furthermore doing so may decrease performance.
    I normally leave per session variable tuning to second step after I can analyze workload.

    注意:就像你看到的上面這些全局表量,它們都是依據硬件配置以及不同的存儲引擎而不同,但是會話變量通常是根據不同的負載來設定的。如果你只有一些簡單的查詢,那么就無需增加 sort_buffer_size 的值了,盡管你有 64GB 的內存。搞不好也許會降低性能。
    我通常在分析系統負載后才來設置會話變量。

    P.S Note MySQL distribution contains bunch of sample my.cnf files which may be great templates to use. Typically they would already be much better than defaults if you chose correct one.

    P.S,MySQL的發行版已經包含了各種 my.cnf 范例文件了,可以作為配置模板使用。通常這比你使用默認設置好的多了。

    posted on 2006-11-22 15:26 恩達 閱讀(370) 評論(0)  編輯  收藏 所屬分類: 轉載

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费在线观看一级毛片| 国产成人免费福利网站| 亚洲国产另类久久久精品小说| 色九月亚洲综合网| 四只虎免费永久观看| www亚洲精品久久久乳| 免费少妇a级毛片| jizz免费在线观看| 亚洲精品自产拍在线观看| 国产啪精品视频网站免费尤物 | 亚洲Av无码国产情品久久| 亚洲色www永久网站| 欧洲精品免费一区二区三区| 色偷偷亚洲男人天堂| 91麻豆国产自产在线观看亚洲| a级毛片毛片免费观看久潮喷| 亚洲AV无码第一区二区三区| aⅴ在线免费观看| 亚洲老熟女五十路老熟女bbw| 又黄又爽一线毛片免费观看| 中文字幕在线视频免费| 一区二区三区亚洲| 成年女人毛片免费视频| 国产亚洲视频在线| 国产亚洲免费的视频看 | 成年在线网站免费观看无广告| 亚洲男人的天堂网站| 亚洲日本一区二区三区在线不卡| 一区二区三区无码视频免费福利| 亚洲人成在线精品| 亚洲一级片内射网站在线观看| 久草视频在线免费看| 亚洲欧美日韩中文高清www777| 亚洲一级特黄无码片| 亚洲综合免费视频| 免费一级特黄特色大片| 一区二区三区亚洲| 亚洲成A∨人片天堂网无码| 99国产精品视频免费观看| 亚洲精品色播一区二区| 亚洲线精品一区二区三区影音先锋|