Magas load

Fórumok

Sziasztok,

Adott egy MySql szerver, ami az Amazon-ra van telepítve. A probléma a CPU "sy" magas értéke:

top - 06:07:47 up 108 days, 16:45, 2 users, load average: 50.87, 49.60, 44.26
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
Cpu(s): 47.5%us, 52.5%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3840332k total, 3649024k used, 191308k free, 14164k buffers
Swap: 1048572k total, 349108k used, 699464k free, 2284352k cached

A problémát a MySQL okozza csak, amit agyonkonfiguráltam de mégsem működik jól:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6155 mysql 20 0 2793m 1.1g 3344 S 188 30.1 106614:12 mysqld

Az strace kimenete a mysql proces-re (a poll érték nagyon magas):

% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.58 5.771869 42130 137 poll
0.28 0.016001 16001 1 restart_syscall
0.12 0.007163 9 825 fcntl
0.01 0.000316 1 275 close

A my.cnf tartalma:
[mysqld]
bind-address=0.0.0.0
lower_case_table_names=1
key_buffer=700M
query_cache_type=2
read_buffer_size=6M
table_open_cache=8192
table_definition_cache=8192
max_connections=300
interactive_timeout=60
wait_timeout=60
low_priority_updates=1

Tudna valaki ötletet adni, hogy hogyan konfiguráljam a mysql-t?

Hozzászólások

A mysql slow query log mond valami hasznosat?

Nekem érthetetlen lassulás, terhelés és felakadás a optimizer_search_depth magas értéke miatt volt, de ez jól látszott a logban.

mysqltuner + query_cache_type=1 + query_cache_size=X

Ha jól látom, a 3G memóriád eléggé le van foglalva (aminek általában örülünk, de) a mysql pedig rácsorog a swapra is.
Ha létezik adatbázissal kapcsolatban valami, amit meg kell akadályozni, akkor ez az. Legyen inkább kisebb a membuffer, de az fizikai memben legyen.

És persze a szokásos alapot itt is elmondom: ellenőrizni a támogató index(ek) meglétét. Ami 200 rekordnál haggyámábékénezzelafeleslegesszarral, az 200k-nál halálközeli élmény.

Itt van egy vmstat kimenet:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
18 0 8024 293948 23204 2600948 1 1 134 165 0 0 60 21 19 0
12 0 8024 293940 23204 2600960 0 0 0 0 916 1048 64 36 0 0
15 0 8024 293940 23204 2600960 0 0 0 0 1124 1160 64 36 0 0
12 0 8024 293940 23212 2600960 0 0 0 22 1063 1093 62 38 0 0
12 0 8024 293940 23212 2600960 0 0 0 2 964 972 63 38 0 0
9 0 8024 293940 23212 2600960 0 0 0 0 1004 997 59 41 0 0
11 0 8024 294196 23212 2600960 0 0 0 0 1130 1053 55 45 0 0
10 0 8024 294204 23220 2600960 0 0 0 26 1035 1007 62 39 0 0
10 0 8024 294832 23220 2600960 0 0 0 0 831 890 62 38 0 0
10 0 8024 294832 23220 2600960 0 0 0 0 899 940 59 41 0 0
7 0 8024 295196 23236 2600944 0 0 0 28 1116 990 51 49 0 0
6 0 8024 295196 23236 2600960 0 0 0 2 997 817 52 48 0 0
9 0 8024 295196 23236 2600960 0 0 0 0 1090 903 53 47 0 0
10 0 8024 295196 23236 2600960 0 0 0 2 1005 927 60 41 0 0
10 0 8024 295196 23248 2600948 0 0 0 50 742 748 65 35 0 0
9 0 8024 295196 23248 2600960 0 0 0 0 997 991 59 41 0 0
9 0 8024 295196 23248 2600960 0 0 0 0 954 883 50 50 0 0
10 0 8024 282244 23248 2600960 0 0 0 0 975 931 53 47 0 0

Jellemzően InnoDB vagy MyISAM táblákról van szó?

Próbáld meg ezekkel a beállításokkal:

sort_buffer_size = 16M
read_buffer_size = 16M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 16M
join_buffer_size = 16M

key_buffer = 64M
thread_stack = 256K
thread_cache_size = magok száma x 2
thread_concurrency = magok száma x 2

query_cache_limit = 1048756
query_cache_size = 2048M
query_cache_type = 1

Illetve én lecserélném Percona forkra a mysql-t, jelentősen gyorsabb.

Tegyél föl rá egy Percona Toolkitet és vizsgáld meg azzal is, hátha nyújt valami kiindulási pontot.

mysqltunert említették előttem, az mit javasolt?

--
„Spiró ótvar, Konrád átok, Nádastól meg mindjárt hányok!”

[OK] Currently running supported MySQL version 5.5.37-0ubuntu0.12.04.1
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 2G (Tables: 676)
[--] Data in InnoDB tables: 1M (Tables: 54)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 74

-------- Performance Metrics -------------------------------------------------
[--] Up for: 4h 13m 15s (1M q [107.957 qps], 104K conn, TX: 798M, RX: 232M)
[--] Reads / Writes: 97% / 3%
[--] Total buffers: 1.1G global + 8.6M per thread (300 max threads)
[!!] Maximum possible memory usage: 3.6G (99% of installed RAM)
[OK] Slow queries: 0% (9K/1M)
[OK] Highest usage of available connections: 42% (126/300)
[OK] Key buffer size / total MyISAM indexes: 700.0M/693.4M
[OK] Key buffer hit rate: 100.0% (7B cached / 105K reads)
[OK] Query cache efficiency: 41.3% (456K cached / 1M selects)
[!!] Query cache prunes per day: 105317
[OK] Sorts requiring temporary tables: 0% (42 temp sorts / 13K sorts)
[OK] Temporary tables created on disk: 2% (213 on disk / 8K total)
[OK] Thread cache hit rate: 99% (126 created / 104K connections)
[OK] Table cache hit rate: 34% (1K open / 3K opened)
[OK] Open file limit used: 0% (1K/1M)
[OK] Table locks acquired immediately: 98% (755K immediate / 766K locks)
[OK] InnoDB data size / buffer pool: 1.7M/128.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
Enable the slow query log to troubleshoot bad queries
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_size (> 64M)