Решил создать тему именно тут, т.к. это врятли проблема в настройке mysql-сервера.
Так вот. Стоит игровой сервер, естественно в базу идет множество запросов, в следствие чего она тупит. Для проверки была накидана прожка на java, которая многопоточно обновляла данные в таблице, результат удивил.. На сервере с 24гб оперативной памяти, 16 ядерным процессором и 2 жесткими дисками в RAID'e, запросы выполнялись медленнее чем на хиленьком компьютере с windows(!). Версии mysql - одинаковые, конфиг - одинаковый, база - одинаковая.Вот результат работы программы на винде:
Time passed: ....... 191268 ms
Total updates: ..... 2732320
Slow updates: ...... 0
Slowest update: .... 16 msКак видно, 2,732,320 запросов, и самый долгий апдейт был 16мс. Программа работала в 30 потоков, 50 соединений к базе.
Вот результат с debian-сервера:
Time passed: ....... 34101 ms
Total updates: ..... 46894
Slow updates: ...... 612
Slowest update: .... 2716 msСделано совсем чуть-чуть запросов, а уже так "ужасно".
"Slowest update" - это те, которые дольше 500мс, настройки программы такие же, как и на винде. Вот сам конфиг mysql:[client]
socket = /var/run/mysqld/mysqld.sockport = 3306
default-character-set = utf8
[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
port = 3306query_cache_size=0
table_cache=1024
thread_cache_size=16
thread_concurrency=8#*** MyISAM Specific options
default_table_type=MYISAM
default-storage-engine=MyISAMmax_heap_table_size=256M
myisam_max_sort_file_size=10G
myisam_sort_buffer_size=128M
key_buffer_size=1G
read_buffer_size=64K
read_rnd_buffer_size=1M
sort_buffer_size=256K
join_buffer_size=512Kmax_allowed_packet=64M
max_connections=500
max_user_connections=500
max_connect_errors=100max_tmp_tables=2048000
tmp_table_size=256Mskip-external-locking
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#slow_query_log
#slow_query_log_file = /var/lib/mysql/slow_query.log
long_query_time = 3
#log_short_format
#log-queries-not-using-indexes# *** Replication related settings
server-id = 1
# Automatically check and repair not properly closed MyISAM tables.
myisam_recover
myisam_repair_threads = 1character-set-server = utf8
collation-server = utf8_general_ci# *** BDB Specific options ***
#skip-bdb# *** INNODB Specific options ***
skip-innodb[mysqldump]
socket = /var/run/mysqld/mysqld.sock
default-character-set = utf8
quick
max_allowed_packet = 64M[mysql]
no-auto-rehash
default-character-set = utf8
max_allowed_packet = 64M[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 32M
write_buffer = 32M[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 32M
write_buffer = 32M[mysqlhotcopy]
interactive-timeout[mysqld_safe]
log-error = /var/log/mysql.log
socket = /var/run/mysqld/mysqld.sock
open-files-limit = 8192[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladminВерсия mysql - 5.1.47
Ядро на дебиане - 2.6.26-2-amd64
База и там и там - MyISAM
Данных в таблице, по которой идет апдейт - примерно 1,600,000
Глобальные переменные и там и там одинаковыеЕще одна интересная вещь в том, что любом unix-сервере моем, эта программа выдавало плачевный результат, а на долбаной винде - нормально, как так? подскажите, где копать, уж крайне не хочется на винду перелазить. Может какая проблема в java mysql-коннекторе или еще чего. Заранее благодарю за ответы.
> Для проверки была накидана прожка на javaТак давай исходники, параметры компиляции и запуска...
>16 ядерным процессором
Ух ты, работаешь в лаборатории AMD?
> Заранее благодарю за ответы.
На здоровье...
В общем, может быть всё что угодно,
... nosmp в загрузчике, неправильная строка запуска MySQL,
корявый fstab для ext3/4, кривой конфиг RAID, кривые sysctl,
фаервол корявый, коряво скомпилили MySQL, или ВСЁ ВМЕСТЕ или ПО ОЧЕРЕДИ. :)
1. Сделать бенчмарки HDD (iozone, bonnie++)
2. Сделать бенчмарки CPU (Einstein@Home)
3. Сделать бенчмарки RAM (STREAM http://www.cs.virginia.edu/stream/)
4. Сделать бенчмарки SMP (NPB-NAS Parallel Benchmarks https://www.nas.nasa.gov/cgi-bin/software/start)
5. Всеми любимые Phoronix Test Suite (http://www.phoronix-test-suite.com/)
6. Сделать бенчмарки MySQL которые в исходниках MySQL
7. Сделать Java benchmark ( http://sourceforge.net/projects/opt)Вот после того, как по всем бенчмаркам усрёшь венду, хотя бы на 15%, тогда и пиши, что плохой MySQL
>[оверквотинг удален]
>1. Сделать бенчмарки HDD (iozone, bonnie++)
>2. Сделать бенчмарки CPU (Einstein@Home)
>3. Сделать бенчмарки RAM (STREAM http://www.cs.virginia.edu/stream/)
>4. Сделать бенчмарки SMP (NPB-NAS Parallel Benchmarks https://www.nas.nasa.gov/cgi-bin/software/start)
>5. Всеми любимые Phoronix Test Suite (http://www.phoronix-test-suite.com/)
>6. Сделать бенчмарки MySQL которые в исходниках MySQL
>7. Сделать Java benchmark ( http://sourceforge.net/projects/opt)
>
>Вот после того, как по всем бенчмаркам усрёшь венду, хотя бы на
>15%, тогда и пиши, что плохой MySQLИсходники, естественно, дать не смогу, слишком дорого они мне обошлись.
Параметры запуска:
java -server -Dfile.encoding=UTF-8 \
-Xms4G -Xmx16G \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:PermSize=128m -XX:NewSize=256m -XX:MaxNewSize=512m \
-Xnoclassgc \
-XX:+DisableExplicitGC \
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -Xloggc:log/gc.log \
-XX:+AggressiveOpts \
-XX:+UseBiasedLocking \
-cp блаблаблаблабла > log/stdout.log 2>&1Извиняюсь, процессор 12 ядер, очепятался. Но не суть важно. Он никогда не нагружен более чем 10-15%.
Причем тут "плохой" mysql? Я сказал лишь, что запросы тормозят, а плохой он или добрый это другая тема. Когда DELETE одной строки занимает почти секунду, знаете ли, начинает немного раздражать :).
Ах да, на "ты" мы с вами еще не переходили. Я не то что бы придераюсь, но все же.Купил себе вчера 2 винта SSD по 128гб в RAID 1, перенес на них базу, симлинк сделал, никакой прибавки скорости я не увидел, вообще.
Причем тут фаерволл? iptables с пустыми правилами глючит? :))
Строки запуска никто не менял, как в дебиане по дефолту - так и есть.
memlock мне тоже ничем не помог.
MySQL ставился из репозитариев дебиана.
По поводу RAID - врятли, ибо даже после переноса базы на SSD толку нет.Еще варианты?
>>[оверквотинг удален]
>Еще варианты?Дальше платно. :)
>>>[оверквотинг удален]
>>Еще варианты?
>
>Дальше платно. :)все это конечно отлично, но форум для помощи, свои услуги предлагайте где-нибудь на веблансере.
>>>>[оверквотинг удален]
>>>Еще варианты?
>>Дальше платно. :)
>все это конечно отлично, но форум для помощи,Угу.
>[оверквотинг удален]
>вообще.
>Причем тут фаерволл? iptables с пустыми правилами глючит? :))
>Строки запуска никто не менял, как в дебиане по дефолту - так
>и есть.
>memlock мне тоже ничем не помог.
>MySQL ставился из репозитариев дебиана.
>По поводу RAID - врятли, ибо даже после переноса базы на SSD
>толку нет.
>
>Еще варианты?Купите ещё что-нибудь.
Тесты сделаны? Как замена винтов может соотноситься с выводом о корректной работе рэйд? Софт-рэйд? Фейк-рэйд?
>[оверквотинг удален]
>>memlock мне тоже ничем не помог.
>>MySQL ставился из репозитариев дебиана.
>>По поводу RAID - врятли, ибо даже после переноса базы на SSD
>>толку нет.
>>
>>Еще варианты?
>
>Купите ещё что-нибудь.
>Тесты сделаны? Как замена винтов может соотноситься с выводом о корректной работе
>рэйд? Софт-рэйд? Фейк-рэйд?А как рэйд соотносится с работой MySQL? С файловыми операциями-то у него все нормально.
>Еще варианты?Отличается ли время выполнения запросов напрямую через mysql shell и через java-коннектор? Вы не указали как получили свой результат.
>В общем, может быть всё что угодно,
>... nosmp в загрузчике, неправильная строка запуска MySQL,
>корявый fstab для ext3/4, кривой конфиг RAID, кривые sysctl,
>фаервол корявый, коряво скомпилили MySQL, или ВСЁ ВМЕСТЕ или ПО ОЧЕРЕДИ. :)мая плакать...
>
>>В общем, может быть всё что угодно,
>>... nosmp в загрузчике, неправильная строка запуска MySQL,
>>корявый fstab для ext3/4, кривой конфиг RAID, кривые sysctl,
>>фаервол корявый, коряво скомпилили MySQL, или ВСЁ ВМЕСТЕ или ПО ОЧЕРЕДИ. :)
>
>мая плакать...Не, твоя пиздить и не чего не аргументировать, и тем более не предложить своего решения проблемы.
а вопрос собственно в чем?