我的網頁伺服器使用專用主機:
Intel(R) Xeon(R) CPU E5620 8core
12Gram
Centos32bit/Driectadmin
DISK SAS 80G
Php-cgi
該主機正在運行一個網站
Use wordpress 2.92(+plugin cache...)
Database size 600MB
only 100online
我的網站運行速度非常慢。請幫我配置 my.cnf。
[mysqld]
user=mysql
key_buffer=128M
set-variable = max_connections=1000
socket = /var/lib/mysql/mysql.sock
key_buffer =32M
table_cache = 1024
open_files_limit = 16344
join_buffer_size = 8M
read_buffer_size = 8M
sort_buffer_size = 8M
tmp_table_size=512M
read_rnd_buffer_size=8M
max_heap_table_size=256M
#myisam_sort_buffer_size=256M
thread_cache_size=8
thread_cache=32
query_cache_type=1
query_cache_limit=1024M
query_cache_size=1024M
thread_concurrency = 16
wait_timeout = 10
connect_timeout = 10
interactive_timeout = 10
long_query_time=1
log-slow-queries = /var/log/mysqlslowqueries.log
max_allowed_packet=32M
skip-innodb
[myisamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M
[isamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
和 MySQLTuner
-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.1.47-log
[!!] Switch to 64-bit OS - MySQL cannot currently use all of your RAM
-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated -InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 471M (Tables: 30)
[!!] Total fragmented tables: 2
-------- Performance Metrics -------------------------------------------------
[--] Up for: 1d 6h 39m 2s (6M q [57.776 qps], 60K conn, TX: 999M, RX: 2B)
[--] Reads / Writes: 93% / 7%
[--] Total buffers: 1.3G global + 32.2M per thread (1000 max threads)
[!!] Allocating > 2GB RAM on 32-bit systems can cause system instability
[!!] Maximum possible memory usage: 32.7G (275% of installed RAM)
[OK] Slow queries: 0% (10K/6M)
[OK] Highest usage of available connections: 5% (52/1000)
[OK] Key buffer size / total MyISAM indexes: 32.0M/65.5M
[OK] Key buffer hit rate: 100.0% (938M cached / 108K reads)
[OK] Query cache efficiency: 51.4% (3M cached / 5M selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (929 temp sorts / 2M sorts)
[!!] Temporary tables created on disk: 49% (2M on disk / 4M total)
[OK] Thread cache hit rate: 99% (580 created / 60K connections)
[OK] Table cache hit rate: 97% (281 open / 288 opened)
[OK] Open file limit used: 1% (319/16K)
[OK] Table locks acquired immediately: 99% (7M immediate / 7M locks)
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Temporary table size is already large - reduce result set size
Reduce your SELECT DISTINCT queries without LIMIT clauses
無法運行 mysqld
[root@server ~]#
[root@server ~]# mysqld
100607 18:21:17 [Warning] mysqld: Option '--set-variable' is deprecated. Use --
100607 18:21:17 [Warning] '--log_slow_queries' is deprecated and will be remove
100607 18:21:17 [Note] Plugin 'FEDERATED' is disabled.
100607 18:21:17 [Note] Plugin 'InnoDB' is disabled.
mysqld: File '/var/log/mysqlslowqueries.log' not found (Errcode: 13)
100607 18:21:17 [ERROR] Could not use /var/log/mysqlslowqueries.log for logging urn it on again: fix the cause, shutdown the MySQL server and restart it.
100607 18:21:17 [ERROR] Can't start server: Bind on TCP/IP port: Address alread
100607 18:21:17 [ERROR] Do you already have another mysqld server running on po
100607 18:21:17 [ERROR] Aborting
100607 18:21:17 [Note] mysqld: Shutdown complete
並從頂部輸出
[root@伺服器 ~]#頂部
top - 18:45:03 up 3 days, 4:40, 1 user, load average: 1.80, 1.42, 1.40
Tasks: 266 total, 1 running, 265 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.6%us, 2.5%sy, 0.0%ni, 92.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 12462096k total, 2741388k used, 9720708k free, 599584k buffers
Swap: 8385920k total, 0k used, 8385920k free, 1612488k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7487 mysql 15 0 1138m 241m 3572 S 98.7 2.0 811:12.72 mysqld
1508 admin 16 0 166m 43m 21m S 0.3 0.4 0:00.80 php-cgi
2019 apache 15 0 9264 3268 1444 S 0.3 0.0 0:00.06 httpd
2089 root 15 0 2336 1132 800 R 0.3 0.0 0:00.15 top
32137 admin 15 0 173m 51m 22m S 0.3 0.4 0:02.11 php-cgi
1 root 15 0 2072 580 504 S 0.0 0.0 0:02.42 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.06 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.03 migration/1
6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
8 root RT -5 0 0 0 S 0.0 0.0 0:00.18 migration/2
9 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/2
10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2
11 root RT -5 0 0 0 S 0.0 0.0 0:00.02 migration/3
12 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/3
13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3
14 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/4
15 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/4
16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/4
17 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/5
18 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/5
19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/5
20 root RT -5 0 0 0 S 0.0 0.0 0:00.01 migration/6
21 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/6
22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/6
23 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/7
24 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/7
25 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/7
26 root RT -5 0 0 0 S 0.0 0.0 0:00.05 migration/8
27 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/8
28 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/8
29 root RT -5 0 0 0 S 0.0 0.0 0:00.05 migration/9
答案1
如果您不知道從哪裡開始,那就從MySQL調優器。
你剛才下載並運行 perl 腳本。
它要求 mysql 管理員的用戶名和密碼,然後列出一些常規統計信息,然後是存儲統計信息,然後是性能指標,最後為您提供建議列表。
它可以節省伺服器實例初始審查的時間。
一旦你修復了問題,我建議每小時左右運行一次腳本,持續一周(可能頻率較低/可能更長,具體取決於資料庫的繁忙程度),以查看實際運行後是否需要更改任何設定。
還可以看看像這樣的資源。
一旦您知道您的 MySQL 實例正常,您將需要優化應用程式程式碼中的特定查詢,您可以透過檢查慢速查詢日誌(如果其中有任何內容)並使用類似的分析器來識別最嚴重的違規者X偵錯。
答案2
您遇到的第一個問題是您正在 32 位元作業系統上執行。你有 12G 的 RAM(如果我沒看錯的話),你永遠不會看到 Mysql 使用那麼多,因為你運行的是 32 位元。將 Centos 升級到 64 位元作業系統,然後開始使用他們提供的 my.large.cnf 檔案。這應該會讓你朝著更好的方向前進。如果您仍然遇到問題,那麼需要評估的事情主要是讀取、寫入還是兩者。這可以告訴你應該使用 Innodb 或 MYISAM。 Innodb 將適合大量更新/寫入和讀取,如果所有內容都主要是讀取,那麼 MyISAM 是一個不錯的選擇。我們還需要了解這一點,以幫助找出密鑰快取等,但首要任務是讓作業系統使用所有 RAM。
答案3
show status
show variables
show processlist
你用的是php-cgi嗎? fcgid 還是 fastcgi?
答案4
你有沒有看過mysql內部正在運行的MySQL進程? (即透過 mytop?)
MySQLd 進程的高 CPU 負載讓我不寒而慄......