Mycat性能調優指南


本篇內容來自於網絡

 

JVM調優: 

內存占用分兩部分:java堆內存+直接內存映射(DirectBuffer占用),建議堆內存

適度大小,直接映射內存盡可能大,兩種一起占據操作系統的1/2-2/3的內存。 

下面以服務器16G內存為例,Mycat堆內存4G,直接內存映射6G,JVM參數如

下: 

-server -Xms4G –Xmx4G   XX:MaxPermSize=64M -XX:MaxDirectMemorySize=6G 

用mycat console等命令啟動MyCAT的,JVM參數都在conf\wrapper.con文件中,下面是一段實例: 

# Java Additional Parameters 

wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G wrapper.java.additional.6=-Dcom.sun.management.jmxremote # Initial Java Heap Size (in MB) wrapper.java.initmemory=2048 # Maximum Java Heap Size (in MB) wrapper.java.maxmemory=2048 操作系統調優: 

最大文件句柄數量的修改,設置為5000-1萬,在Mycat Server和Mysql數據庫的機器上都設置。Linux操作系統對一個進程打開的文件句柄數量的限制(也包含打開的SOCKET數量,可影響MySQL的並發連接數目).這個值可用ulimit命令來修改,但ulimit命令修改的數值只對當前登錄用戶的目前使用環境有效,系統重啟或者用戶退出后就會失效。   

Mysql調優: 

最大連接數設置為2000

[mysqld]中有參數 

max_connections = 2000 

mysql> show global status like 'Max_used_connections'; 

MySQL服務器過去的最大連接數是245,沒有達到服務器連接數上限256,應該沒有出現1040錯誤,比較理想的設置是: 

Max_used_connections / max_connections * 100% ≈ 85% 

最大連接數占上限連接數的85%左右,如果發現比例在10%以下,MySQL服務器連接上線就設置得過高了。 

  

Mycat調優: 

Conf/log4j.xml中,日志級別調整為至少info級別,默認是debug級別,用於排查錯誤,不能用於性能測試和正式生產中。  

conf/server.xml中 有如下參數可以調整: <system> 

 <!— CPU核心數越多,可以越大,當發現系統CPU壓力很小的情況下,可以適當調大此參數,如4核心的4CPU,可以設置為16,24核心的可以最大設置為128——>  

 

<property name="processors">1</property> 

下面這個參數為每個processor的線程池大小,建議可以是16-64,根據系統能力來測試和確定。 

<property name="processorExecutor">16</property>  

</system> 

 System中以下重要參數也根據情況進行調整

processorBufferPool :每個processor分配的Socket Direct Buffer,用於網絡通信,每

個processor上管理的所有連接共享,processorBufferChunk為Pool的最小分配單元,每個POOL的容量即為processorBufferPool/processorBufferChunk,默認前者為1024 * 1024 * 16=16M,后者為4096字節。processorBufferPool參數的調整,需要觀察show @@processor的結果來確定: 

BU_PERCENT為已使用的百分比、BU_WARNS為Socket Buffer Pool不夠時,臨時創新的新的BUFFER的次數,若百分比經常超過90%並且BU_WARNS>0,則表明

BUFFER不夠,需要增大processorBufferPool。基本上,連接數越多,並發越高,需要的POOL越大,建議BU_PERCENT最大在40-80%之間。   

conf/schema.xml中有如下參數可以調整: 

<schema name="TESTDB" checkSQLschema="true"> ,checkSQLschema屬性建議設置為false,要求開發中,不能在sql中添加數據庫的名稱,如select * from TESTDB.company,這樣可以優化SQL解析。 

<dataHost name="localhost1" maxCon="500" minCon="10" balance="0"   

 

dbType="mysql" dbDriver="native" banlance="0"> 

<!—最大連接池maxCon,可以改為1000至2000,同一個Mysql實例上的所有datanode節點的共享本dataHost 上的所有物理連接à 

性能測試的時候,建議minCon=maxCon= mysql max_connections 

設為2000左右。 

另外,讀寫分離是否開啟,根據環境的配置來決定。  

緩存優化調整: 

Show @@cache命令展示了緩存的使用情況,經常觀察其結果,需要時候進行調整: 

一般來說:若CUR接近MAX,而PUT大於MAX很多,則表明MAX需要增大, HIT/ACCESS為緩存命中率,這個值越高越好。重新調整緩存的最大值以后,觀測指標都會跟隨變化,調整是否有效,主要觀察緩存命中率是否在提升,PUT則下降。

目前緩存服務的配置文件為:cacheservice.properties,主要使用的緩存為enhache,enhache.xml里面設定了enhance緩存的全局屬性,下面定義了幾個緩存:

#used for mycat cache service conf  

factory.encache=org.opencloudb.cache.impl.EnchachePooFactory

#key is pool name ,value is type,max size, expire seconds

pool.SQLRouteCache=encache,10000,1800

pool.ER_SQL2PARENTID=encache,1000,1800  

layedpool.TableID2DataNodeCache=encache,10000,18000

layedpool.TableID2DataNodeCache.TESTDB_ORDERS=50000,18000  

l SQLRouteCache為SQL 解析和路由選擇的緩存,這個大小基本相對固定,就是所有 SELECT語句的數量。  

l ER_SQL2PARENTID為ER分片時候,根據關聯SQL查詢父表的節點時候用到,沒有用到 ER分片的,這個緩存用不到  

l TableID2DataNodeCache,當某個表的分片字段不是主鍵時,緩存主鍵到分片ID的關系, 這個是二層的緩存,每個表定義一個子緩存,如”TEST_ORDERS”,這里命名為 schema_tableName(tablename要大寫),當有很多的根據主鍵查詢SQL時,這個緩存往往需要設置比較大,才能更好的提升性能。     

Mycat大數據量查詢調優:    

1.返回結果比較多

建議調整 frontWriteQueueSize 在系統許可的情況下加大,默認值*3

這個原因是因為返回數據太多   

這里做了一個改進,就是超過POOL以后,仍然創建臨時的BUFFER供使用,但這些不回收。。   這樣的情況下,需要增加BUFFER參數  

調整 processorBufferPool = 默認值*2  

不夠的情況下,繼續加大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM