天天看點

Row Cache For InnoDB 第二版優化(附帶安裝和配置說明)

下面說一下第二版的一個改進:

1. log的顯示優化了.能夠顯示出打log的時間了,也能正确換行

2. 優化misc記憶體的占用..

3. 對小記憶體配置設定進行了優化(單獨的記憶體池)

4. 可配置對需要的索引進行緩存,而不是無差别的對所有索引緩存(支援通配符哦)

這個功能的目的是為了能使緩存可控,并不是所有的資料都合适被row cache,隻有那些資料比較離散的合适,比如輔助索引5. 支援使用作業系統的malloc進行記憶體配置設定(如果你用tc_malloc或je_malloc可以嘗試開啟此功能)

6. 支援線上清空row cache緩存

7. 修正一些可能會引起crash的地方

8. 修正一個可能會導緻記憶體洩露的地方

這次的patch經過了比較長時間(跑了一個禮拜)的高壓力穩定性測試.應該是比較穩定了,建議大家使用這個版本的patch

還存在的一些問題和接下去要做的一些優化

1. misc的記憶體占用還是個大問題.. 32位下一個misc結構要使用48個位元組的記憶體.64位下面就需要将近90個位元組了,是以需要做指針壓縮

也可以考慮一個misc結構緩存多條記錄的方式來提高記憶體使用率2. 記憶體碎片

有使用row cache的一些弟兄也可以給我一些回報,不管是好的還是不好的,都有助于我更好的維護row cache哦

可以發郵件到[email protected] ,謝謝

附安裝和配置說明中文版:  安裝

2. 解壓mysql源碼

tar zvxf mysql-5.1.48.tar.gz3. 打上row cache for innodb的更新檔 patch -p0 < ./row_cache_for_mysql.5.1.48_2011_05_11.diff4. configure

建議參數: cflags=”-o3″ cxx=gcc cxxflags=”-o3 -felide-constructors -fno-exceptions -fno-rtti” ./configure –prefix=/usr/mysql –with-extra-charsets=all –with-plugins=partition,heap,innobase,myisam,myisammrg,csv –enable-assembler5. make & make install 新增的配置(my.cnf)(row cache是作用在innodb_plugin之上的哦,記得開啟innodb_plugin) innodb_row_cache_mem_pool_size

配置設定給row cache 的記憶體大小 預設1m innodb_row_cache_on 開啟row cache 的開關,如果是off,那麼一切記憶體都不會被配置設定

預設off innodb_row_cache_cell_num

row cache所使用的hash table的cell數,越大越容易被一次命中,但是也越占記憶體(也還好,也就占一個指針的空間) 預設 1000 innodb_row_cache_mutex_num_shift 由于row cache是使用多緩存執行個體的方式來提高并發性,這個參數就是用來配置執行個體數的,由于執行個體數必須是2的幂,是以執行個體數就是(1<<innodb_row_cache_mutex_num_shift) 即2^innodb_row_cache_mutex_num_shift 這個數字建議比innodb_thread_concurrency 大一點就行了,不需要很大

預設 6 innodb_row_cache_additional_mem_pool_size

額外的記憶體池,用于配置設定misc需要用到的記憶體,當innodb_row_cache_additional_mem_pool_size配置設定的記憶體用光時misc會到innodb_row_cache_mem_pool_size配置設定的記憶體裡面去申請記憶體 預設 1m innodb_row_cache_index 用于配置需要被緩存的索引

配置樣例:innodb_row_cache_index = test/test_large:idx_age  , test是資料庫, test_large是表,idx_age 是索引,如果是主索引的話用primary 配置是支援 和 ? 這樣的通配符的 如果不配置就是對所有索引進行緩存

這個配置是可以被線上更新的哦 預設為null innodb_row_cache_clean_cache 這個主要是用來做debug用的

線上把這個值設定為1時 會清空row cache 顯示的值 永遠是0 innodb_row_cache_use_sys_malloc 新增的狀态(使用show status可以看到)

innodb_row_cache_n_get 總的向row cache請求數,包括可能missing的請求數 innodb_row_cache_n_geted 從row cache傳回成功的數量 innodb_row_cache_lru_count row cache一共緩存記錄數 innodb_row_cache_lru_n_add 向row cache一共添加的記錄數 innodb_row_cache_lru_n_evict 被row cache逐出的記錄數 innodb_row_cache_lru_n_make_first 被row cache置頂的記錄數(就是被通路到的次數 應該和innodb_row_cache_n_geted是相等的,不過innodb_row_cache_lru_n_make_first是在鎖内的更精确 ) innodb_row_cache_mem_pool_size row cache配置設定的記憶體數innodb_row_cache_mem_pool_used 在show innodb status 上也加入了關于row cache使用情況:

本文來源于"阿裡中間件團隊播客",原文發表時間"  2011-09-10"

繼續閱讀