這是我db內的my.cnf…
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
max_connections = 5000
wait_timeout=10
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
上網找到了這個網頁http://www.dk101.com/Discuz/viewthread.php?tid=115738
裡面提到可以使用記憶體大約2g的範本來當my.cnf,
但因為不熟sql,怕轉了之後會造成系統不穩或出問題,目前是使用在forum上的
另外,網頁上提到的範例檔,很多也看不太懂…不知道什麼可以放,什麼不可以放
MySQL 優化,是很注重你現在的系統需求與現況的,不是一個標準值,要不然 MySQL 出廠就設好那個標準值就好了。所以你要先提出你想服務幾個連線,你的硬體設備是什麼 CPU、多少記憶體,別人才能給你建議調成什麼值會比較好,或者告訴你你的電腦根本撐不到你要的需求。
你的設定檔只有這兩個有關效能
max_connections = 5000
wait_timeout=10
這看起來就很不 OK。首先一個 connection 保守預估要佔 3MB,假設就是 3MB 好了,你設 5000,就等於 MySQL 一啟動就先佔住 15GB 的記憶體,你電腦的記憶體有插到這麼多記憶體嗎?然後這個 wait_timeout 是指一個連線幾秒沒使用就回收。假如 user 使用你的網站一定會在 10 秒內有取用資料庫的換頁動作,那倒還好,如果他是十多秒點一下,那他會感覺你的網站很慢,因為每次取網頁都在重連 MySQL。
目前先將
max_connections = 5000
wait_timeout=10
改為3000和200,這樣子會比較好一點嗎?
我想我已經說得很清楚了:**你要先提出你想服務幾個連線,你的硬體設備是什麼 CPU、多少記憶體,別人才能給你建議調成什麼值會比較好。**你還是什麼也沒講,所以我也不知道調成這樣有什麼意義。
呃…我補充在上面…因為是第一次用,沒注意到直接回覆在這邊,不好意思。
系統是centos5.6
cpu Intel(R) Xeon(TM) CPU 2.80GHz
總記憶體是2g
swap大小為3G
服務幾個連線的部份我不是很懂,會調低是想說先不要讓電腦吃這麼重…不好意思,因為是第一次接觸
抱歉,沒往上看,所以沒注意到你補充的部份。
你的實體記憶體只有 2GB,估計大概 150~200 個 connection 就已經使用 1.8GB 左右,所以你開 3000 是太離譜了,而且電腦中還有 OS 跟其它軟體在跑,總不能記憶體通通都給 MySQL 用吧?先調成 150 就好了。
wait_timeout 是要看 user 平均的換頁間隔而定。200 秒是三分鐘多,你自己可以斟酌一下。
服務幾個連線,說法上相近於服務幾個線上人數,也就是你的網站想要撐多少人同時使用。目前如果調成 150,大概就只能服務約 130~140 人左右同時使用。如果你想再提高,那就得加裝記憶體了。
想請問一下,大大有沒有介紹sql語法的網址呀
因為完整的sql語法不是很了解,且若想依完整的內容設定的話
該怎麼調整比較好。
何謂完整,就如果http://www.dk101.com/Discuz/viewthread.php?tid=115738 中的例子方式一樣。
對不起,因為小弟的能力不足,這樣子麻煩您,若讓您感覺不舒服的話,我先說聲抱歉…
你是不是還不知道什麼是 SQL 啊?
你說要介紹 SQL 語法的網站,但你給的範例卻是 MySQL 的設定?!
《SQL 語法》跟《MySQL 的設定》是完全不一樣的兩回事喔,你想瞭解的應該是後者吧?
其實不管前者或後者,MySQL 官方站的手冊都有說明:
SQL 語法:http://dev.mysql.com/doc/refman/5.5/en/sql-syntax.html
MySQL 的設定:http://dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
不好意思,我以為語法中就會說明每個設定的功能。
會給範例是因為我目前想依這個範例為系統update,但礙於以下設定看不懂,所以才會想說先麻煩您為我調整設定,因為主管說希望我在"今天"把優化先上,也就是my.cnf的設定。
set-variable = key_buffer=384M
set-variable = max_allowed_packet=1M
set-variable = table_cache=512
set-variable = sort_buffer=1M
set-variable = record_buffer=1M
set-variable = join_buffer_size=4M
你有現在系統服務的數據嗎?平均多少人在線上?你想要讓系統可以撐多少人?這些資料都影響最佳化的調整,你依然沒有提到這些資料。
光就硬體規格,我能建議的也就大概是
max_connections = 200
wait_timeout=600
key_buffer=128M
query-cache-type=1
query-cache-size=32M
其它暫時用內定值就好了。不過上面都不叫最佳化,因為沒有實際運作狀況可以參考,所以只是讓你的硬體不會太操的保守值而已。
PS. set-variable 不用寫了,那是舊版語法。
查看帳號登入的記錄加上自己猜測的訪客,初估二十~三十左右,但可能沒這麼多,撐多少個我目前也不是很清楚,撐百人的話呢?
這是我目前設定的,其於的部份,是參照範例打的。請問一下有指令可以看目前的設定運行的狀態如何嗎?
max_connections = 200
wait_timeout= 200
max_connect_errors = 30000
key_buffer = 512M
max_allowed_packet= 4M
table_cache = 512
sort_buffer = 4M
join_buffer_size = 4M
thread_cache = 8
thread_concurrency = 1
myisam_sort_buffer_size = 64M
query-cache-type = 1
query-cache-size = 32M