MySQL Performance Tuning mit Tuning-Primer.sh Script

Da meine Kristallkugel vom TÜV außer betrieb genommen wurde, kann ich Dir Deine MySQL-Logindaten nicht zukommen lassen.
Testen kannst Du sie wie folgt:
Code:
mysql -uroot -p mysql
Falls Du mit irgendeiner Kombination aus root/PW dann auf die MySQL-Console kommst, nutzt Du diese auch im Tuning-Script.

huschi.
 
RAM Berechnung tuning-primer.sh vs. mysqltuner.pl

Hallo,
ich bin mit Hilfe dieses Threads enorm weit gekommen.
Einige Dinge habe ich aber nicht so ganz verstanden.

1.) Wenn ich weiß das meine MySQL DB 1GB groß ist
wie kann ich sicherstellen das alle operationen komplett
im RAM ausgeführt werden? Welche Variablen muß
ich da für setzen?

2.) tuning-primer.sh und mysqltuner.pl geben stark abweichende
Daten für "Max Memory Ever Allocated" "Maximum possible memory usage"
Ich vermute das bei einem script nicht alle Buffers berücksichtigt werden?

3.) key_buffer + (sort_buffer + read_buffer) x max_connections = RAM
Stimmt das noch ? Spielen read_rnd_buffer, sort_buffer_size und
myisam_isam_sort_buffer_size da auch eine Rolle?

4.) Das knüpft an 3. an. Beim probieren ist mir aufgefallen das manche der
Variablen lediglich einmal vom gesammten RAM abgehen und andere Variablen
als vielfaches also vermutlich pro Thread oder Connection. Gibt es Informationen
wie man die Variabeln "Per Hand" addieren kann um den wirklich
genauen RAM verbauch zu errechen? Den beiden Scripten traue ich nicht
wirklich.

5.) Wenn ein Server Swapped kann man raus finden was er swapped ?
Ich habe hin und wieder swaps 2% des RAMS ich denke das ist nicht
schlimm trotz dem ist es ja interessant was geswapped wird.

Ich frage das alles deshalb da man als Hobby sicher die MySql DB dem
vorhandenen RAM anpasst aber wie geht man ran wenn man konkret
weiß ich habe eine DB mit der Größe X und reche mit Y Usern und
möchte genug RAM haben um damit Apache und MySql optimal arbeiten
(also nur im RAM).

Weiter ist mir aufgefallen das z.b. bei WordpressMU mehr MySql Prozesse
als httpd Prozesse benötigt also nicht Apache : MySql = 2 :1 oder 1:1
sondern eher 90 : 100 wie geht das überhaupt? Ist bei WordpressMU
e.v.t. etwas besonderes zu beachten?

Gruß

Micha
 
Zu 1) sag ich weiter unten etwas. Denn ich kann mir wirklich keine Fall vorstellen, dass eine Datenbank konstant auf 1GB bleibt. ;)

Zu 2)
Während tuning-primer den binlog_cache_size in den Thread-Speicher mit zählt tut dies mysqltuner nicht. Was davon korrekt ist, entzieht sich meiner aktuellen Kenntnis.

Zu 3)
Den Thread-Buffer berechnen beide Scripte aus read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size und tuning-primer zusätzlich mit binlog_cache_size.
Für den Max-Allocated wird Thread-Buffer * max_used_connections plus den globalen Buffers gerechnet: innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + key_buffer_size + query_cache_size. Zusätzlich addiert mysqltuner auch die max_tmp_table_size dazu.

Zu 4)
Steht ja eigentlich oben.
Es sei noch angemerkt, dass beide Script-Autoren sich sehr viel Mühe gemacht haben und MySQL relativ gut gecheckt haben. Wer also von den Beiden bei den Abweichungen evtl. richtig oder falsch liegt mag ich nicht so ganz beurteilen.

Zu 5)
Z.B. mit "top" wenn Du Dir mit den Tasten f + p + [Return] die SWAP-Spalte anzeigen lässt.
Wenn von wichtigen Prozessen (z.B. MySQL oder Apache) etwas im Swap liegt, bedeutet dies aber noch nichts Schlimmes. Beide haben einen wesentlichen Code-Overhead. Sprich Programmcode, den ein normal Sterblicher niemals braucht. ;)

Die weiteren nicht durchnummerierten Fragen:
wenn man konkret weiß ich habe eine DB mit der Größe X und reche mit Y Usern
Eine Datenbank ist doch dynamisch!
Du kannst keine DB mit einer festen Größe veranschlagen, wenn Du weißt, dass die Daten durch die Nutzung weiter wachsen oder sich verändern werden. Sobald sich Daten verändern hilft auch der größte Cache nichts.

bei WordpressMU mehr MySql Prozesse als httpd Prozesse benötigt also nicht Apache : MySql = 2 :1 oder 1:1 sondern eher 90 : 100 wie geht das überhaupt?
Es werden dann ggf. in einem Script zwei Datenbankverbindungen aufgebaut.
So was ist entweder weil es schlecht programmiert ist, oder weil der Entwickler in der ersten Connection einen Query auslesen möchte, während er aber gleichzeitig Daten aus einem anderen Query braucht.
Eine spezielle Erklärung (um die Schuld nicht auf die WP-Entwickler zu schieben) wäre, dass ein WP-Modul/-Plugin zusätzlich eine eigene Connection aufbaut. Das wäre dann einfach eine schlechte Programmierung des Plugins bzw. es wird sich nicht an die gegebene API gehalten.

huschi.
 
MySql + Apache im RAM

Hallo Hushi,

vielen, vielen Dank das schafft Klarheit
wie das zu rechnen ist.

Bleibt die Frage wie kann ich sicherstellen
das Apache und MySql komplett im RAM
ausgeführt werden? Die DB mit 1GB sollte
nur ein Beispiel sein. Welche Parameter
müssen dann gesetzt sein das die 1GB
auf jeden Fall im Ram bleiben? (Klar sollte
man da Luft einplanen)

Bei MyIsam bleibt dann noch der Satz
vom tuning-primer " BLOB and TEXT
columns are not allow in memory tables."
Heißt das im Umkehrschluss wenn ich InnoDB
umstelle und das Script abarbeite das die
DB dann komplett im RAM arbeiten kann?
Klar genug RAM vorausgestezt. (Mir ist klar
man verzichtet dann auf die Volltextsuche)

Es kommt mir schon fast leichter vor die DB
gleich auf eine RamDisk zu legen? Dann hat
man Volltextsuche und Performance.
Ich meine was soll der Geiz 16GB Dual Channel
können selbst Consumer Boards problemlos.

Gruß

Micha
 
Fangen wird doch einfach mal normal an:
Von was für eine Datenbank reden wir denn?
Ist sie wirklich rein statisch, oder ändern sich die Daten im Verlauf?

Denn es macht keinen Sinn über "Datenbank im RAM" zu reden, wenn sich Daten verändern die dann nie auf die Platte geschrieben werden.

huschi.
 
Auswertung:
Code:
root@ks352794:/tmp# ./tuning-primer.sh

        -- MYSQL PERFORMANCE TUNING PRIMER --
             - By: Matthew Montgomery -

MySQL Version 5.0.32-Debian_7etch6-log x86_64

Uptime = 26 days 0 hrs 23 min 41 sec
Avg. qps = 915
Total Questions = 2057289814
Threads Connected = 760

Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
The slow query log is enabled.
Current long_query_time = 3 sec.
You have 42058 out of 2057290077 that take longer than 3 sec. to complete
Your long_query_time seems to be fine

BINARY UPDATE LOG
The binary update log is enabled
Binlog sync is not enabled, you could loose binlog records during a server crash

WORKER THREADS
Current thread_cache_size = 8
Current threads_cached = 4
Current threads_per_sec = 4
Historic threads_per_sec = 0
Threads created per/sec are overrunning threads cached
You should raise thread_cache_size

MAX CONNECTIONS
Current max_connections = 1000
Current threads_connected = 764
Historic max_used_connections = 1001
The number of used connections is 100% of the configured maximum.
You should raise max_connections

MEMORY USAGE
Max Memory Ever Allocated : 2.63 G
Configured Max Per-thread Buffers : 2.59 G
Configured Max Global Buffers : 42 M
Configured Max Memory Limit : 2.63 G
Physical Memory : 992 M

Max memory limit exceeds 90% of physical memory

KEY BUFFER
Current MyISAM index space = 53 M
Current key_buffer_size = 16 M
Key cache miss rate is 1 : 49
Key buffer free ratio = 75 %
Your key_buffer_size seems to be fine

QUERY CACHE
Query cache is enabled
Current query_cache_size = 16 M
Current query_cache_used = 6 M
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 41.36 %
Current query_cache_min_res_unit = 4 K
Query Cache is 24 % fragmented
Run "FLUSH QUERY CACHE" periodically to defragment the query cache memory
If you have many small queries lower 'query_cache_min_res_unit' to reduce fragmentation.
MySQL won't cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current read_rnd_buffer_size = 256 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 981 queries where a join could not use an index properly
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.
If you are unable to optimize your queries you may want to increase your
join_buffer_size to accommodate larger joins in one pass.

Note! This script will still suggest raising the join_buffer_size when
ANY joins not using indexes are found.

OPEN FILES LIMIT
Current open_files_limit = 5000 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 64 tables
You have a total of 315 tables
You have 64 open tables.
Current table_cache hit rate is 0%, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 6806940 temp tables, 46% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your
ratio of on disk temp tables.

TABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 622 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 23
You may benefit from selective use of InnoDB.
If you have long running SELECT's against MyISAM tables and perform
frequent updates consider setting 'low_priority_updates=1'
If you have a high concurrency of inserts on Dynamic row-length tables
consider setting 'concurrent_insert=2'.

Einstellungen:
Code:
connect_timeout = 30
wait_timeout = 1800
key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 128K
thread_cache_size       = 8
max_connections        = 1500
table_cache            = 64
query_cache_limit       = 1M
query_cache_size        = 16M

Top Ausgabe:
Code:
top - 20:16:08 up 126 days,  5:23,  1 user,  load average: 4.50, 4.29, 3.93
Tasks: 362 total,   5 running, 356 sleeping,   0 stopped,   1 zombie
Cpu(s): 59.6%us, 26.8%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi, 13.6%si,  0.0%st
Mem:   1015896k total,   969768k used,    46128k free,    12928k buffers
Swap: 10241428k total,   168992k used, 10072436k free,   355244k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8703 mysql     20   0  388m 213m 4576 R 65.6 21.6  15410:21 mysqld
17533 www-data  20   0  222m 8632 4116 S 18.5  0.8   0:13.16 apache2
17259 www-data  20   0  225m  12m 8388 R  2.6  1.3   0:00.12 apache2
17953 root      20   0 10856 1532  952 R  1.3  0.2   0:00.12 top
14910 www-data  20   0  223m 9124 4660 S  0.7  0.9   0:00.46 apache2
15654 www-data  20   0  225m  12m 8456 S  0.7  1.3   0:00.34 apache2
16130 www-data  20   0  223m 9056 4584 S  0.7  0.9   0:00.16 apache2
16137 www-data  20   0  223m 9080 4612 S  0.7  0.9   0:00.18 apache2
16147 www-data  20   0  223m 9128 4656 S  0.7  0.9   0:00.14 apache2
16182 www-data  20   0  223m 9072 4604 S  0.7  0.9   0:00.20 apache2
17344 www-data  20   0  223m 9088 4616 S  0.7  0.9   0:00.12 apache2
17401 www-data  20   0  223m 8848 4392 S  0.7  0.9   0:00.10 apache2
17402 www-data  20   0  223m 8896 4432 S  0.7  0.9   0:00.04 apache2
17442 www-data  20   0  222m 8560 4108 S  0.7  0.8   0:00.16 apache2

Wäre nett wenn sich das jemand mal anschauen könnte.
Danke sehr
 
Hallo liebe Leutz, also ich probiere mich nun seid gestren mit dem Script habe auch viel gegoogelt aber nix gefunden was mir helfen könnte wie ich die Einstellungen setze.

Könnte mir vllt da jemand behiflich sein das wahre super.

Hier mal mein Output von tuning.sh

Code:
Server has been running for over 48hrs.
It should be safe to follow these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10 sec.
You have 119 out of 1740713 that take longer than 10 sec. to complete
Your long_query_time may be too high, I typically set this under 5 sec.

BINARY UPDATE LOG
The binary update log is enabled
Binlog sync is not enabled, you could loose binlog records during a server crash

WORKER THREADS
Current thread_cache_size = 8
Current threads_cached = 6
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 2
Historic max_used_connections = 16
The number of used connections is 16% of the configured maximum.
Your max_connections variable seems to be fine.

MEMORY USAGE
Max Memory Ever Allocated : 84 M
Configured Max Per-thread Buffers : 265 M
Configured Max Global Buffers : 42 M
Configured Max Memory Limit : 307 M
Physical Memory : 1.96 G
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 351 M
Current key_buffer_size = 16 M
Key cache miss rate is 1 : 13
Key buffer free ratio = 63 %
Your key_buffer_size seems to be fine

QUERY CACHE
Query cache is enabled
Current query_cache_size = 16 M
Current query_cache_used = 342 K
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 2.09 %
Current query_cache_min_res_unit = 4 K
Query Cache is 21 % fragmented
Run "FLUSH QUERY CACHE" periodically to defragment the query cache memory
If you have many small queries lower 'query_cache_min_res_unit' to reduce fragme                                                                                                                               ntation.
Your query_cache_size seems to be too high.
Perhaps you can use these resources elsewhere
MySQL won't cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 2 M
Current read_rnd_buffer_size = 256 K
Sort buffer seems to be fine

JOINS
Current join_buffer_size = 132.00 K
You have had 0 queries where a join could not use an index properly
Your joins seem to be using indexes properly

OPEN FILES LIMIT
Current open_files_limit = 1024 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 64 tables
You have a total of 228 tables
You have 64 open tables.
Current table_cache hit rate is 2%, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
Current max_heap_table_size = 16 M
Current tmp_table_size = 32 M
Of 105154 temp tables, 7% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Created disk tmp tables ratio seems fine

TABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 138 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 1215
You may benefit from selective use of InnoDB.
If you have long running SELECT's against MyISAM tables and perform
frequent updates consider setting 'low_priority_updates=1'
If you have a high concurrency of inserts on Dynamic row-length tables
consider setting 'concurrent_insert=2'.

Meine conf sieht atm so aus

Code:
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 128K
thread_cache_size	= 8
query_cache_limit       = 1M
query_cache_size        = 16M
log_bin			= /var/log/mysql/mysql-bin.log
expire_logs_days	= 10
max_binlog_size         = 100M

[mysqldump]
quick
quote-names
max_allowed_packet	= 16M


[isamchk]
key_buffer		= 16M

Leider verste ich nicht genau wo ich ansetzen muss welche eintrage hinzufügen/verändern/entfernen muss.

Mein Server hat Ram : 2 Gigs, CPU AMD Athlon(tm) 64 X2 Dual Core Processor 3400+

Hoffe mir kann einer behilflich sein.
Vielen Dank
sahkur
 
ich hab mal ne ganz blöde frage.

wie lüppt da smit dem script ?

habs wie in der anleitung in /usr/bin kopiert und rechte gesetzt und ausgeführt.

Aber dann erghalte ich das:

Code:
xxxx:/usr/bin# tuning-primer.sh

Using login values from ~/.my.cnf

- INITIAL LOGIN ATTEMPT FAILED -

Testing for stored webmin passwords: None Found

Could not auto detect login info!

Found Sockets:
/var/run/mysqld/mysqld.sock

Using: /var/run/mysqld/mysqld.sock
Would you like to provide a different socket?: [y/N]
Do you have your login handy ? [y/N] :

Please create a valid login to MySQL
Or, set correct values for  'user=' and 'password=' in ~/.my.cnf

Would you like me to create a ~/.my.cnf file for you? [y/N] :
xxxx:/usr/bin#

hab mal in das script geschaut.. Da steht immer überall ~/.my.cnf

Aber meine von mysql liegt da nicht. die liegt in /etc/mysql/

Soll ich das Editieren ?
 
Lege die Datei ~/.my.cnf mit einem Editor an und gebe ihr folgendem Inhalt:
Code:
[client]
password = [I]streng-geheim0815[/I] 
user= root
EDIT: Fehler beseitigt (s. nächsten Post)
 
Last edited by a moderator:
Tja das einzige wa sich bekomme ist das hier:

Code:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
        -- MYSQL PERFORMANCE TUNING PRIMER --
             - By: Matthew Montgomery -

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
MySQL Version

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
/usr/bin/tuning-primer.sh: line 444: /: syntax error: operand expected (error token is "/")

Passwort ist definitiv richtig.. habe es ja in phpmyadmin ausprobiert.

EDIT: Thx für den Hinweis was in die Datei muss aber das mochte er net. Das musste anders aussehen

[client]
user = username
passwort = passw
socket
 
Last edited by a moderator:
Hallo zusammen,

habe viele Seiten hier durchgelesen.
Aber nun blicke ich nichtmehr ganz durch.

Auf Seite X wird es so beschrieben und auf Seite X widerrufen und auf Seite X soll man es wieder anders machen.

Wie kann ich meinen vServer mit 512 MB RAM optimieren?
Zurzeit habe ich ca. 450 MB RAM frei.

Hier die wichtigsten Daten, welche immer abgefragt werden:

httpd.conf:
Code:
# prefork MPM
<IfModule prefork.c>
        StartServers            1
        MinSpareServers         1
        MaxSpareServers         5
        ServerLimit            20
        MaxClients             20
        MaxRequestsPerChild   5000
</IfModule>

KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15

my.cfg:
Code:
# The MySQL server
[mysqld]
set-variable=local-infile=0
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 3M
max_allowed_packet = 1M
table_cache = 128
sort_buffer_size = 1M
net_buffer_length = 8K
read_buffer_size = 1M
read_rnd_buffer_size = 6M
myisam_sort_buffer_size = 10M
skip-innodb
skip-bdb
[safe_mysqld]
err-log=/var/lib/mysql/mysqld.log
skip-bdb
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 2M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 2M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout

top:
Code:
top - 17:16:01 up 4 days,  8:10,  2 users,  load average: 0.27, 0.15, 0.10
Tasks:  34 total,   1 running,  33 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.5% sy,  0.0% ni, 99.5% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    524288k total,    71520k used,   452768k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18209 root      16   0  249m  13m 6584 S    0  2.6   0:02.75 httpd2-prefork
22212 mysql     15   0  176m  12m 4496 S    0  2.4  31:41.40 mysqld
30183 wwwrun    16   0  250m  11m 3464 S    0  2.3   0:00.63 httpd2-prefork
 3967 wwwrun    16   0  249m  11m 3108 S    0  2.1   0:00.06 httpd2-prefork
 3703 wwwrun    16   0  249m  10m 3172 S    0  2.1   0:00.07 httpd2-prefork
 3710 wwwrun    15   0  249m  10m 3224 S    0  2.1   0:00.08 httpd2-prefork
 5153 wwwrun    16   0  249m  10m 3036 S    0  2.1   0:00.03 httpd2-prefork
21582 root      15   0 97456 3612 2660 S    0  0.7   0:00.15 sshd
21961 root      16   0 97456 3612 2660 S    0  0.7   0:00.07 sshd
22123 root      16   0 22408 2796 1524 S    0  0.5   0:00.09 bash
21667 root      16   0 22404 2748 1504 S    0  0.5   0:00.05 bash
14309 root      15   0 23920 1588 1328 S    0  0.3   0:00.01 console-kit-dae
22140 root      17   0 13072 1488 1180 S    0  0.3   0:00.01 mysqld_safe
17427 root      16   0 61740 1316  696 S    0  0.3   0:00.00 sshd
21730 root      15   0 16624 1200  924 R    0  0.2   0:05.65 top
11487 root      16   0 13780 1116  836 S    0  0.2   0:00.00 courierlogger
11517 root      16   0 13780 1116  836 S    0  0.2   0:00.07 courierlogger
17444 root      16   0 18952  992  760 S    0  0.2   0:07.83 xinetd
11503 root      18   0 13648  944  684 S    0  0.2   0:00.00 courierlogger
11528 root      18   0 13648  944  684 S    0  0.2   0:00.00 courierlogger
14290 messageb  15   0 14552  832  636 S    0  0.2   0:00.04 dbus-daemon
17527 root      16   0 20440  812  624 S    0  0.2   0:00.28 cron
13884 root      12  -4 12260  772  444 S    0  0.1   0:00.00 udevd
11484 root      15   0 17980  764  468 S    0  0.1   0:00.00 couriertcpd
11514 root      15   0 17976  760  468 S    0  0.1   0:00.10 couriertcpd
11501 root      21   0 17976  748  456 S    0  0.1   0:00.00 couriertcpd
11526 root      21   0 17976  748  456 S    0  0.1   0:00.00 couriertcpd
17433 root      15   0  5776  680  548 S    0  0.1   0:08.42 syslogd
17673 qmails    16   0  3704  552  452 S    0  0.1   0:07.53 qmail-send
17689 qmaill    15   0  3652  536  444 S    0  0.1   0:00.87 splogger
17695 qmailr    15   0  3688  472  352 S    0  0.1   0:00.67 qmail-rspawn
17694 root      15   0  3692  456  340 S    0  0.1   0:00.01 qmail-lspawn
17696 qmailq    15   0  3648  420  336 S    0  0.1   0:00.31 qmail-clean
    1 root      16   0   732  296  244 S    0  0.1   0:00.39 init

tuning-primer.sh:
Code:
        -- MYSQL PERFORMANCE TUNING PRIMER --
             - By: Matthew Montgomery -

MySQL Version 5.0.45 x86_64

./tuning-primer.sh: line 407: bc: command not found
./tuning-primer.sh: line 408: bc: command not found
./tuning-primer.sh: line 409: bc: command not found
./tuning-primer.sh: line 410: bc: command not found
./tuning-primer.sh: line 411: bc: command not found
./tuning-primer.sh: line 412: bc: command not found
Uptime =  days  hrs  min  sec
Avg. qps = 3
Total Questions = 267383
Threads Connected = 2

Warning: Server has not been running for at least 48hrs.
It may not be safe to use these recommendations

To find out more information on how each of these
runtime variables effects performance visit:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Visit http://www.mysql.com/products/enterprise/advisors.html
for info about MySQL's Enterprise Monitoring and Advisory Service

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10 sec.
You have 10 out of 267439 that take longer than 10 sec. to complete
Your long_query_time may be too high, I typically set this under 5 sec.

BINARY UPDATE LOG
The binary update log is NOT enabled.
You will not be able to do point in time recovery
See http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html

WORKER THREADS
Current thread_cache_size = 0
Current threads_cached = 0
Current threads_per_sec = 1
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 100
Current threads_connected = 4
Historic max_used_connections = 7
The number of used connections is 7% of the configured maximum.
You are using less than 10% of your configured max_connections.
Lowering max_connections could help to avoid an over-allocation of memory
See "MEMORY USAGE" section to make sure you are not over-allocating

MEMORY USAGE
./tuning-primer.sh: line 1226: bc: command not found
./tuning-primer.sh: line 1227: bc: command not found
./tuning-primer.sh: line 1251: bc: command not found
./tuning-primer.sh: line 1254: bc: command not found
./tuning-primer.sh: line 1255: bc: command not found
./tuning-primer.sh: line 1257: bc: command not found
./tuning-primer.sh: line 1259: [: -gt: unary operator expected
./tuning-primer.sh: line 369: [: max_memoryHR: integer expression expected
./tuning-primer.sh: line 375: [: max_memoryHR: integer expression expected
./tuning-primer.sh: line 381: [: max_memoryHR: integer expression expected
./tuning-primer.sh: line 388: export: `=max_memoryHR': not a valid identifier
Max Memory Ever Allocated :  bytes
./tuning-primer.sh: line 369: [: per_thread_buffersHR: integer expression expected
./tuning-primer.sh: line 375: [: per_thread_buffersHR: integer expression expected
./tuning-primer.sh: line 381: [: per_thread_buffersHR: integer expression expected
./tuning-primer.sh: line 388: export: `=per_thread_buffersHR': not a valid identifier
Configured Max Per-thread Buffers :  bytes
./tuning-primer.sh: line 369: [: global_buffersHR: integer expression expected
./tuning-primer.sh: line 375: [: global_buffersHR: integer expression expected
./tuning-primer.sh: line 381: [: global_buffersHR: integer expression expected
./tuning-primer.sh: line 388: export: `=global_buffersHR': not a valid identifier
Configured Max Global Buffers :  bytes
./tuning-primer.sh: line 369: [: total_memoryHR: integer expression expected
./tuning-primer.sh: line 375: [: total_memoryHR: integer expression expected
./tuning-primer.sh: line 381: [: total_memoryHR: integer expression expected
./tuning-primer.sh: line 388: export: `=total_memoryHR': not a valid identifier
Configured Max Memory Limit :  bytes
./tuning-primer.sh: line 350: bc: command not found
Physical Memory :  M
Max memory limit seem to be within acceptable norms

KEY BUFFER
./tuning-primer.sh: line 668: bc: command not found
./tuning-primer.sh: line 669: bc: command not found
./tuning-primer.sh: line 350: bc: command not found
Current MyISAM index space =  M
./tuning-primer.sh: line 350: bc: command not found
Current key_buffer_size =  M
Key cache miss rate is 1 : 944
Key buffer free ratio =  %
./tuning-primer.sh: line 706: [: -le: unary operator expected
./tuning-primer.sh: line 710: [: -le: unary operator expected
Your key_buffer_size seems to be fine

QUERY CACHE
Query cache is supported but not enabled
Perhaps you should set the query_cache_size

SORT OPERATIONS
./tuning-primer.sh: line 350: bc: command not found
Current sort_buffer_size =  M
./tuning-primer.sh: line 350: bc: command not found
Current read_rnd_buffer_size =  M
Sort buffer seems to be fine

JOINS
./tuning-primer.sh: line 350: bc: command not found
Current join_buffer_size =  K
You have had 0 queries where a join could not use an index properly
Your joins seem to be using indexes properly

OPEN FILES LIMIT
Current open_files_limit = 1024 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_cache value = 128 tables
You have a total of 473 tables
You have 128 open tables.
Current table_cache hit rate is 3%, while 100% of your table cache is in use
You should probably increase your table_cache

TEMP TABLES
./tuning-primer.sh: line 350: bc: command not found
Current max_heap_table_size =  M
./tuning-primer.sh: line 350: bc: command not found
Current tmp_table_size =  M
Of 46369 temp tables, 40% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your
ratio of on disk temp tables.

TABLE SCANS
./tuning-primer.sh: line 350: bc: command not found
Current read_buffer_size =  K
Current table scan ratio = 963 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 9844
Your table locking seems to be fine

/proc/user_beancounters:
Code:
Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
    118148: kmemsize                  9424206             15539562             15523666             17076032               242260
            lockedpages                     0                    2                  344                  344                    0
            privvmpages                 18419                71833               131072               139264                    0
            shmpages                     1417                 7209                19567                19567                    0
            dummy                           0                    0                    0                    0                    0
            numproc                        37                   95                  128                  128                    0
            physpages                   10480                60323                    0  9223372036854775807                    0
            vmguarpages                     0                    0                65536  9223372036854775807                    0
            oomguarpages                10489                60329                65536  9223372036854775807                    0
            numtcpsock                     15                  151                  288                  288                    0
            numflock                        6                   16                  224                  246                    0
            numpty                          2                    5                   16                   16                    0
            numsiginfo                      0                   27                  512                  512                    0
            tcpsndbuf                  171112              1047768              2449232              3598712                    0
            tcprcvbuf                  196608              1282360              2449232              3598712                    0
            othersockbuf                21096               322872               844366              1481926                    0
            dgramrcvbuf                     0                 8488               844366               844366                    0
            numothersock                   17                   41                  288                  288                    0
            dcachesize                1307691              2324035              2254786              2322430                82199
            numfile                      2215                 3308                 4256                 4256                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            numiptent                      27                   27                   64                   64                    0


Wie muß ich nun meine configs anpassen, dass die Anfragen am schnellsten/besten bearbeitet werden können und das es bei apache und mysql zu keinem Flaschenhals kommt?

Auf meinem System gibt es 4 "aktive" Domains, fals das noch hilfreich sein sollte.


Vielen Dank für ein paar Änderungsvorschläge
 
Last edited by a moderator:
Hast Du Dir die ganzen Copy-Paste-Sachen auch mal angesehen? Evtl. sogar versucht zu verstehen?
Wahrscheinlich nicht, sonst wäre Dir aufgefallen, dass das tuning-primer-Script nur Fehlermeldungen ausspuckt.

Solange Du keine wesentlichen Performance-Einbusen hast, brauchst Du am System auch nicht künstlich rum zu schrauben.

huschi.
 
Ja habe ich gesehen.
Aber was soll ich hier machen?

Naja ich bin der Meinung das die Seiten ruhig etwas schneller aufgerufen werden könnten.


Ich will nur vermeiden, dass es beim MySQL/Apache zum Flaschenhals kommt.


Gibt es aber auf den ersten Blick eine große Änderung zu machen?


Ich hatte gestern Abend mal testweise folgendes gemacht:

Code:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2

Danach war die Seite total extrem langsam.
 
Wie wäre es damit, die Fehler zu beseitigen?!

Auf den ersten Blick (mehr hast Du ja auch nicht investiert) schlage ich vor, bc zu installieren.

--marneus
 
Gut, werde ich heute Abend mach inst.

Aber warum war der Server plötzlich lahm mit den nachträglichen Einstellungen?

Auf fast allen Seiten von diesem Thema, sollte man die Werte so einstellen.
 
Das "warum" ist eher eine philosophische Frage.
Und nur weil andere rein springen springst Du hinterher, oder?
Es gibt einfach Server (insbesondere bei mangelnder Speicherkapazität) die einen KeepAlive einfach nicht vertragen. Wenn das bei Dir so ist, dann musst Du auch damit leben.

huschi.
 
Hallo!
Es mag sein das du viel aber nicht genügend Speicher zur Verfügung hast. Beachte mal den failcount bei kmemsize.

mfG
Thorsten
 
Zwei fragen mal noch:

Worin besteht der Unterschied zw.

"sort_buffer_size" und "sort_buffer"?



Hab grad nach BC gesucht. Wo bekomme ich das her?
 
Back
Top