LINUX.ORG.RU

История изменений

Исправление KRoN73, (текущая версия) :

cast KRoN73, образно говоря, мне нужна печь от которой можно плясать :-)

Посмотри цифры по sysbench. Типа такого скрипта:

#!/bin/bash

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

SIZE=1000000
DB=TMP_SYSBENCH
USER=`cat /root/.my.cnf | grep ^user= | head -n1 | cut -d= -f2`
PASS=`cat /root/.my.cnf | grep ^password= | head -n1 | cut -d= -f2`
HOST=`cat /root/.my.cnf | grep ^host= | head -n1 | cut -d= -f2`

mysql -e "CREATE DATABASE $DB;"

RESULT_FILE=$(hostname)-$(date +%Y-%m%d-%H%M)-host-$HOST-big-complex-rw.txt
sudo mysql -e "SELECT @@version;" > $RESULT_FILE

echo "--- MAKE TEST -----------------------------------" >> $RESULT_FILE

echo Make test
/usr/bin/time sysbench --test=oltp --oltp-table-size=$SIZE \
        --mysql-db=$DB --mysql-user=$USER --mysql-password=$PASS --mysql-host=$HOST \
        prepare >> $RESULT_FILE 2>&1

echo "--- RUN  TEST -----------------------------------" >> $RESULT_FILE

echo Begin test
sysbench --test=oltp --oltp-table-size=$SIZE --mysql-db=$DB --mysql-user=$USER --mysql-password=$PASS --mysql-host=$HOST \
        --oltp-test-mode=complex --oltp-read-only=off \
        --max-time=30 --max-requests=0 --num-threads=8 run >> $RESULT_FILE

echo Cleanup
sysbench --test=oltp --oltp-table-size=$SIZE --mysql-db=$DB --mysql-user=$USER --mysql-password=$PASS  --mysql-host=$HOST cleanup

mysql -e "DROP DATABASE $DB;"


Я уже наткнулся на то, что большинство бюджетных VPS (при чём мало зависимо от цены) сами по себе имеют отвратительную производительность по mysql за пределами простейших запросов. И никакой оптимизацией это не разрулить :-/

Например, тупо по числу операций (total number of events, больше = лучше) у меня получается так:

- Домашний сервер (CPU: 2550, SSD): 57K
- VDS Хетцнер (CPU: 4770, HDD): 51K
- VDS Scaleway (CPU: Atom C2750, SSD): 39K
- VPS Aruba: 6K
- VPS Scaleway: 5K
- VPS DigitalOcean: 2K

На лёгкие форумные/блоговые задачи цифр VPS хватает, чуть таблицы посложнее с внешними ключами и джойнами — всё, единичные запросы страниц начинают длиться, порой, секундами, о работе под нагрузкой и говорить нечего :)

Процент более 30% и требуется увеличить параметры tmp_table_size (текущее значение: 128 МБ)

Ну, у меня в конфиге самого жирного сервера (оперативки — 32Гб, объём /var/lib/mysql — 49Гб) так:

# Значение по умолчанию 16 МБ, если вы не используете MEMORY таблиц,
# то установите это значение равным tmp_table_size.

max_heap_table_size = 2G

# tmp_table_size — максимальный размер памяти, выделяемой для временных таблиц,
# создаваемых MySQL для своих внутренних нужд. Это значение также
# ограничивается переменной max_heap_table_size, поэтому в итоге будет выбрано
# минимальное значение из max_heap_table_size и tmp_table_size, а остальные
# временные таблицы будут создаваться на диске. Значение по умолчанию зависит
# от системы, попробуйте установить его равным 32 МБ и понаблюдать за переменной
# состояния Created_tmp_disk_tables, ее значение должно быть как можно меньше.

tmp_table_size      = 2G

Исходная версия KRoN73, :

cast KRoN73, образно говоря, мне нужна печь от которой можно плясать :-)

Посмотри цифры по sysbench. Типа такого скрипта:

#!/bin/bash

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

SIZE=1000000
DB=TMP_SYSBENCH
USER=`cat /root/.my.cnf | grep ^user= | head -n1 | cut -d= -f2`
PASS=`cat /root/.my.cnf | grep ^password= | head -n1 | cut -d= -f2`
HOST=`cat /root/.my.cnf | grep ^host= | head -n1 | cut -d= -f2`

mysql -e "CREATE DATABASE $DB;"

RESULT_FILE=$(hostname)-$(date +%Y-%m%d-%H%M)-host-$HOST-big-complex-rw.txt
sudo mysql -e "SELECT @@version;" > $RESULT_FILE

echo "--- MAKE TEST -----------------------------------" >> $RESULT_FILE

echo Make test
/usr/bin/time sysbench --test=oltp --oltp-table-size=$SIZE \
        --mysql-db=$DB --mysql-user=$USER --mysql-password=$PASS --mysql-host=$HOST \
        prepare >> $RESULT_FILE 2>&1

echo "--- RUN  TEST -----------------------------------" >> $RESULT_FILE

echo Begin test
sysbench --test=oltp --oltp-table-size=$SIZE --mysql-db=$DB --mysql-user=$USER --mysql-password=$PASS --mysql-host=$HOST \
        --oltp-test-mode=complex --oltp-read-only=off \
        --max-time=30 --max-requests=0 --num-threads=8 run >> $RESULT_FILE

echo Cleanup
sysbench --test=oltp --oltp-table-size=$SIZE --mysql-db=$DB --mysql-user=$USER --mysql-password=$PASS  --mysql-host=$HOST cleanup

mysql -e "DROP DATABASE $DB;"


Я уже наткнулся на то, что большинство бюджетных VPS (при чём мало зависимо от цены) сами по себе имеют отвратительную производительность по mysql за пределами простейших запросов. И никакой оптимизацией это не разрулить :-/

Например, тупо по числу операций (total number of events, больше = лучше) у меня получается так:

- Домашний сервер (CPU: 2550, SSD): 57K
- VDS Хетцнер (CPU: 4770, HDD): 51K
- VDS Scaleway (CPU: Atom C2750, SSD): 39K
- VPS Aruba: 6K
- VPS Scaleway: 5K
- VPS DigitalOcean: 2K

На лёгкие форумные/блоговые задачи цифр VPS хватает, чуть таблицы посложнее с внешними ключами и джойнами — всё, единичные запросы страниц начинают длиться, порой, секундами, о работе под нагрузкой и говорить нечего :)

Процент более 30% и требуется увеличить параметры tmp_table_size (текущее значение: 128 МБ)

Ну, у меня в конфиге самого жирного сервера так:

# Значение по умолчанию 16 МБ, если вы не используете MEMORY таблиц,
# то установите это значение равным tmp_table_size.

max_heap_table_size = 2G

# tmp_table_size — максимальный размер памяти, выделяемой для временных таблиц,
# создаваемых MySQL для своих внутренних нужд. Это значение также
# ограничивается переменной max_heap_table_size, поэтому в итоге будет выбрано
# минимальное значение из max_heap_table_size и tmp_table_size, а остальные
# временные таблицы будут создаваться на диске. Значение по умолчанию зависит
# от системы, попробуйте установить его равным 32 МБ и понаблюдать за переменной
# состояния Created_tmp_disk_tables, ее значение должно быть как можно меньше.

tmp_table_size      = 2G