第一先限制Innodb的并發(fā)處理.如果innodb_thread_concurrency = 0 可以先改成 16或是64 看機器壓力,如果
非常大,先改成16讓機器的壓力下來,然后慢慢增達,適應自已的業(yè)務.
處理方法: set global innodb_thread_concurrency=16;
方法一: (window系統(tǒng)中可直接修改my.ini文件)
進入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改為 max_connections=1000 服務里重起MYSQL即可
方法二: (在mysql命令模式下)
對于連接數(shù)已經(jīng)超過600或是更多的情況,可以考慮適當?shù)南拗埔幌逻B接數(shù),讓前端報一下錯,也別讓DB掛了.
DB在了,總是可以用來加載一下數(shù)據(jù),當數(shù)據(jù)加載到了nosql里了,慢慢的DB壓力也會降下來的.
限制單用戶連接數(shù)在500以下. 如:
set global max_user_connections=500;
(MySQL隨著連接數(shù)的增加性能會是下降的,這也是thread_pool出現(xiàn)的原因)
另外對于有的監(jiān)控程序會讀取information_schema下面的表的程序可以考慮關閉下面的參數(shù)
innodb_stats_on_metadata=0
set global innodb_stats_on_metadata=0;
方法
MySQL的最大連接數(shù)默認是100客戶端登錄:mysql -uusername -ppassword
設置新的最大連接數(shù)為200:mysql> set GLOBAL max_connections=200
顯示當前運行的Query:mysql> show processlist
顯示當前狀態(tài):mysql> show status
退出客戶端:mysql> exit
查看當前最大連接數(shù):mysqladmin -uusername -ppassword variables
這個參數(shù)主要防止對讀取information_schema時造成大量讀取磁盤進行信息統(tǒng)計(如果慢查詢中出現(xiàn)關于information_schema中表時,也可以考慮禁用該參數(shù))
處理依據(jù):
當學校的一個食堂一分鐘只能為兩個打飯, 忽然來了100個時人來打飯,又沒排隊, 不出會現(xiàn)了打飯的師傅要用點時間
去選擇為那個用戶服務了, 人越多,場面就越亂, 難免出現(xiàn)用戶大吼該他的場面, 最后有可能就出現(xiàn)不是打飯了,而時之間相互
打架了,打飯的師傅也將收到同時有90個以上的Server too busy. 如果能排一下隊.最多也就50分鐘能處理完了
方法三: (linux中得新編譯mysql)
以centos 4.4 下面的mysql 5.0.33 手工編譯版本為例說明:
vi /usr/local/mysql/bin/mysqld_safe
找到safe_mysqld編輯它,找到mysqld啟動的那兩行,在后面加上參數(shù):
-O max_connections=1500
具體一點就是下面的位置:
用紅字特別說明:
then $NOHUP_NICENESS $ledir/$MYSQLD
$defaults --basedir=$MY_BASEDIR_VERSION
--datadir=$DATADIR $USER_OPTION
--pid-file=$pid_file
--skip-external-locking
-O max_connections=1500
>> $err_log 2>&1 else
eval "$NOHUP_NICENESS $ledir/$MYSQLD
$defaults --basedir=$MY_BASEDIR_VERSION
--datadir=$DATADIR $USER_OPTION
--pid-file=$pid_file
--skip-external-locking $args
-O max_connections=1500 >>
$err_log 2>&1"
新聞熱點
疑難解答
圖片精選