本篇內容來自於網絡java
JVM調優: node
內存佔用分兩部分:java堆內存+直接內存映射(DirectBuffer佔用),建議堆內存mysql
適度大小,直接映射內存儘量大,兩種一塊兒佔據操做系統的1/2-2/3的內存。 sql
下面以服務器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 操做系統調優: app
最大文件句柄數量的修改,設置爲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
不夠的狀況下,繼續加大。