iT邦幫忙

0

my.cnf要優化更新,但不熟sql,怎麼辦

  • 分享至 

  • xImage

這是我db內的my.cnf…
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

Default to using old password format for compatibility with mysql 3.x

clients (those using the mysqlclient10 compatibility package).

old_passwords=1

Disabling symbolic-links is recommended to prevent assorted security risks;

to do so, uncomment this line:

symbolic-links=0

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上的
另外,網頁上提到的範例檔,很多也看不太懂…不知道什麼可以放,什麼不可以放

wiseguy iT邦超人 1 級 ‧ 2012-05-10 12:43:25 檢舉
key_buffer 至少要涵蓋所有 *.MYI 的總 size。
table_cache 至少涵蓋 TABLE 的數目。
thread_concurrency 則是CPU數量(多核心也算)*2 。
如果只要撐 20~30 人,那現在的設定是綽綽有餘了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
wiseguy
iT邦超人 1 級 ‧ 2012-04-30 22:23:37
最佳解答

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,這樣子會比較好一點嗎?

wiseguy iT邦超人 1 級 ‧ 2012-05-01 18:56:12 檢舉

我想我已經說得很清楚了:**你要先提出你想服務幾個連線,你的硬體設備是什麼 CPU、多少記憶體,別人才能給你建議調成什麼值會比較好。**你還是什麼也沒講,所以我也不知道調成這樣有什麼意義。

呃…我補充在上面…因為是第一次用,沒注意到直接回覆在這邊,不好意思。
系統是centos5.6
cpu Intel(R) Xeon(TM) CPU 2.80GHz
總記憶體是2g
swap大小為3G
服務幾個連線的部份我不是很懂,會調低是想說先不要讓電腦吃這麼重…不好意思,因為是第一次接觸

wiseguy iT邦超人 1 級 ‧ 2012-05-02 09:37:17 檢舉

抱歉,沒往上看,所以沒注意到你補充的部份。
你的實體記憶體只有 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 中的例子方式一樣。
對不起,因為小弟的能力不足,這樣子麻煩您,若讓您感覺不舒服的話,我先說聲抱歉…

wiseguy iT邦超人 1 級 ‧ 2012-05-09 08:41:28 檢舉

你是不是還不知道什麼是 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

wiseguy iT邦超人 1 級 ‧ 2012-05-10 00:25:30 檢舉

你有現在系統服務的數據嗎?平均多少人在線上?你想要讓系統可以撐多少人?這些資料都影響最佳化的調整,你依然沒有提到這些資料。
光就硬體規格,我能建議的也就大概是
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

我要發表回答

立即登入回答