Mycat性能調優指南

本篇內容來自於網絡java


JVM調優: node

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

適度大小,直接映射內存儘量大,兩種一塊兒佔據操做系統的1/2-2/3的內存。 sql

下面以服務器16G內存爲例,Mycat堆內存4G,直接內存映射6GJVM參數如數據庫

下: 緩存

-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 操做系統調優: app

最大文件句柄數量的修改,設置爲5000-1萬,在Mycat ServerMysql數據庫的機器上都設置。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,能夠設置爲1624核心的能夠最大設置爲128——>  

 

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

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

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

</system> 

 System中如下重要參數也根據狀況進行調整

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

processor上管理的全部鏈接共享,processorBufferChunkPool的最小分配單元,每一個POOL的容量即爲processorBufferPool/processorBufferChunk,默認前者爲1024 * 1024 * 16=16M,後者爲4096字節。processorBufferPool參數的調整,須要觀察show @@processor的結果來肯定: 

BU_PERCENT爲已使用的百分比、BU_WARNSSocket 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,能夠改成10002000,同一個Mysql實例上的全部datanode節點的共享本dataHost 上的全部物理鏈接à 

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

設爲2000左右。 

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

緩存優化調整: 

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


通常來講:若CUR接近MAX,而PUT大於MAX不少,則代表MAX須要增大, HIT/ACCESS爲緩存命中率,這個值越高越好。從新調整緩存的最大值之後,觀測指標都會跟隨變化,調整是否有效,主要觀察緩存命中率是否在提高,PUT則降低。

目前緩存服務的配置文件爲:cacheservice.properties,主要使用的緩存爲enhacheenhache.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 SQLRouteCacheSQL 解析和路由選擇的緩存,這個大小基本相對固定,就是全部 SELECT語句的數量。  

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

l TableID2DataNodeCache,當某個表的分片字段不是主鍵時,緩存主鍵到分片ID的關係, 這個是二層的緩存,每一個表定義一個子緩存,如」TEST_ORDERS」,這裏命名爲 schema_tableNametablename要大寫),當有不少的根據主鍵查詢SQL時,這個緩存每每須要設置比較大,才能更好的提高性能。     

Mycat大數據量查詢調優:    

1.返回結果比較多



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


這個緣由是由於返回數據太多   

這裏作了一個改進,就是超過POOL之後,仍然建立臨時的BUFFER供使用,但這些不回收。。   這樣的狀況下,須要增長BUFFER參數  

調整 processorBufferPool = 默認值*2  

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