Оптимизация работы с MySQL

1 234
vandamme
На сайте с 30.11.2008
Offline
675
#21
dag:
Это я к тому, что может быть что угодно. Удивительно другое - 50 гиг данных это уже что то более менее серьезное.
Как оно вообще появилось на свет без единого специалиста?

легко, у меня на одном сервисе гиг в неделю собирается. Типа поисковый движок, curl парсит и кеширует.

X
На сайте с 17.08.2012
Offline
47
#22
Vin_cent:
1. Сделать раздел mysql tmpdir на ram диске (tmpdir=/mnt/ramdisk):
mkdir -p /mnt/ramdisk
chown mysql:mysql /mnt/ramdisk
mount -t tmpfs -o size=8024M tmpfs /mnt/ramdisk

2. Если запросы короткие и простые, то можно попробовать вообще отключить mysql кэш: query_cache_type=0

3. Если таблицы myisam используются в основном для чтения, то в innodb переводить их нет смысла.

И покажи вывод mysqltuner.pl

Перевел временные файлы на рамдиск.

Вывод mysqltuner:


>> MySQLTuner 1.6.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.5.50-MariaDB
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +Aria +BLACKHOLE +CSV +FEDERATED +InnoDB +MRG_MYISAM  [--] Data in MyISAM tables: 21G (Tables: 3890)
[--] Data in InnoDB tables: 408M (Tables: 37)
[--] Data in MEMORY tables: 5M (Tables: 8)
[!!] Total fragmented tables: 243

-------- Security Recommendations -------------------------------------------
-------- Performance Metrics -------------------------------------------------
[--] Up for: 49s (150K q [3K qps], 6K conn, TX: 7B, RX: 19M)
[--] Reads / Writes: 95% / 5%
[--] Binary logging is disabled
[--] Total buffers: 3.0G global + 70.3M per thread (300 max threads)
[OK] Maximum reached memory usage: 6.6G (21.03% of installed RAM)
[OK] Maximum possible memory usage: 23.6G (75.39% of installed RAM)
[OK] Slow queries: 0% (58/150K)
[OK] Highest usage of available connections: 17% (52/300)
[OK] Aborted connections: 0.01% (1/6945)
[!!] Query cache efficiency: 15.2% (22K cached / 146K selects)
[!!] Query cache prunes per day: 58774922
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 8K sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 8K total)
[OK] Thread cache hit rate: 91% (625 created / 6K connections)
[!!] Table cache hit rate: 1% (401 open / 31K opened)
[OK] Open file limit used: 18% (744/4K)
[OK] Table locks acquired immediately: 99% (182K immediate / 182K locks)

-------- MyISAM Metrics -----------------------------------------------------
[!!] Key buffer used: 41.3% (55M used / 134M cache)
[OK] Key buffer size / total MyISAM indexes: 128.0M/4.3G
[OK] Read Key buffer hit rate: 96.1% (5M cached / 200K reads)
[!!] Write Key buffer hit rate: 0.1% (5K cached / 5K writes)

-------- InnoDB Metrics -----------------------------------------------------
[--] InnoDB is enabled.
[OK] InnoDB buffer pool / data size: 2.0G/408.4M
[OK] InnoDB buffer pool instances: 2
[!!] InnoDB Used buffer: 2.59% (3393 used/ 131070 total)
[OK] InnoDB Read buffer efficiency: 95.63% (62690 hits/ 65555 total)
[!!] InnoDB Write buffer efficiency: 0.00% (0 hits/ 1 total)
[OK] InnoDB log waits: 0.00% (0 waits / 346 writes)

-------- AriaDB Metrics -----------------------------------------------------
[--] AriaDB is disabled.

-------- Replication Metrics -------------------------------------------------
[--] No replication slave(s) for this server.
[--] This is a standalone server..

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Restrict Host for user@% to user@SpecificDNSorIp
MySQL started within last 24 hours - recommendations may be inaccurate
Increasing the query_cache size over 128M may reduce performance
Increase table_open_cache gradually to avoid file descriptor limits
Read this before increasing table_open_cache over 64: http://*******/1mi7c4C
Beware that open_files_limit (4000) variable
should be greater than table_open_cache ( 400)
Variables to adjust:
query_cache_limit (> 64M, or use smaller result sets)
query_cache_size (> 256M) [see warning above]
table_open_cache (> 400)


A
На сайте с 19.07.2010
Offline
130
#23

Xylitol, посмотрите индексы на большой табличке. если там есть примари по нескольким полям, то это повод присмотреться более внимательно. (обычно достаточно составной индекс примари перевести в unique)

когда ковыряете черный ящик(закрытый код), то полезно бывает смотреть sql запросы. временно включите slow log и поставьте время сначала одну секунду, потом 0.5 , затем 0.1 , если выживет, то еще уменьшайте. по полученному логу пытаемся понять логику разработчика приложения и думаем.

.............
Vin_cent
На сайте с 22.01.2010
Offline
165
#24
Xylitol:
Перевел временные файлы на рамдиск.
Вывод mysqltuner:


>> MySQLTuner 1.6.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.5.50-MariaDB
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +Aria +BLACKHOLE +CSV +FEDERATED +InnoDB +MRG_MYISAM  [--] Data in MyISAM tables: 21G (Tables: 3890)
[--] Data in InnoDB tables: 408M (Tables: 37)
[--] Data in MEMORY tables: 5M (Tables: 8)
[!!] Total fragmented tables: 243

-------- Security Recommendations -------------------------------------------
-------- Performance Metrics -------------------------------------------------
[--] Up for: 49s (150K q [3K qps], 6K conn, TX: 7B, RX: 19M)
[--] Reads / Writes: 95% / 5%
[--] Binary logging is disabled
[--] Total buffers: 3.0G global + 70.3M per thread (300 max threads)
[OK] Maximum reached memory usage: 6.6G (21.03% of installed RAM)
[OK] Maximum possible memory usage: 23.6G (75.39% of installed RAM)
[OK] Slow queries: 0% (58/150K)
[OK] Highest usage of available connections: 17% (52/300)
[OK] Aborted connections: 0.01% (1/6945)
[!!] Query cache efficiency: 15.2% (22K cached / 146K selects)
[!!] Query cache prunes per day: 58774922
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 8K sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 8K total)
[OK] Thread cache hit rate: 91% (625 created / 6K connections)
[!!] Table cache hit rate: 1% (401 open / 31K opened)
[OK] Open file limit used: 18% (744/4K)
[OK] Table locks acquired immediately: 99% (182K immediate / 182K locks)

-------- MyISAM Metrics -----------------------------------------------------
[!!] Key buffer used: 41.3% (55M used / 134M cache)
[OK] Key buffer size / total MyISAM indexes: 128.0M/4.3G
[OK] Read Key buffer hit rate: 96.1% (5M cached / 200K reads)
[!!] Write Key buffer hit rate: 0.1% (5K cached / 5K writes)

-------- InnoDB Metrics -----------------------------------------------------
[--] InnoDB is enabled.
[OK] InnoDB buffer pool / data size: 2.0G/408.4M
[OK] InnoDB buffer pool instances: 2
[!!] InnoDB Used buffer: 2.59% (3393 used/ 131070 total)
[OK] InnoDB Read buffer efficiency: 95.63% (62690 hits/ 65555 total)
[!!] InnoDB Write buffer efficiency: 0.00% (0 hits/ 1 total)
[OK] InnoDB log waits: 0.00% (0 waits / 346 writes)

-------- AriaDB Metrics -----------------------------------------------------
[--] AriaDB is disabled.

-------- Replication Metrics -------------------------------------------------
[--] No replication slave(s) for this server.
[--] This is a standalone server..

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Restrict Host for user@% to user@SpecificDNSorIp
MySQL started within last 24 hours - recommendations may be inaccurate
Increasing the query_cache size over 128M may reduce performance
Increase table_open_cache gradually to avoid file descriptor limits
Read this before increasing table_open_cache over 64: http://*******/1mi7c4C
Beware that open_files_limit (4000) variable
should be greater than table_open_cache ( 400)
Variables to adjust:
query_cache_limit (> 64M, or use smaller result sets)
query_cache_size (> 256M) [see warning above]
table_open_cache (> 400)


Up for: 49s

Пускай база без перезагрузок поработает хотя бы пару часов. И только тогда сделать вывод mysqltuner.

M
На сайте с 17.09.2016
Offline
124
#25

Вроде же 50 гб было)

уже 20+

Metal Messiah
На сайте с 01.08.2010
Offline
152
#26

Ну нельзя работать с такими большими таблицами. НЕЛЬЗЯ! Разве что если это не Amazon RDS или если вся таблица не лежит на RAM или SSD диске.

Таблицу надо бить на несколько. У меня пара гигов исторических записей на сколько-то лимонов тормозила, переписал скрипт под работу с разными таблицами - на актуальные данные из одной, если нужно подгрузить исторические (редко нужно) то и вторая тоже.

anonymous, думай что говоришь и не забывай подписать отзыв :)
X
На сайте с 17.08.2012
Offline
47
#27

Таблица похудела потому, что очистил.

Мне кажется, что еще большой затык в дисковой подсистеме сервера

https://gyazo.com/d562e1d4d21cda1aef47b6e217ee046c

---------- Добавлено 03.01.2017 в 14:16 ----------

Metal_Messiah:
Ну нельзя работать с такими большими таблицами. НЕЛЬЗЯ! Разве что если это не Amazon RDS или если вся таблица не лежит на RAM или SSD диске.
Таблицу надо бить на несколько. У меня пара гигов исторических записей на сколько-то лимонов тормозила, переписал скрипт под работу с разными таблицами - на актуальные данные из одной, если нужно подгрузить исторические (редко нужно) то и вторая тоже.

на данный момент никак не могу изменить структуру таблиц. Не мой скрипт :(

LEOnidUKG
На сайте с 25.11.2006
Offline
1726
#28

Ну можете докупить SSD и перекинуть туда mysql весь, должно полегче стать.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
X
На сайте с 17.08.2012
Offline
47
#29
LEOnidUKG:
Ну можете докупить SSD и перекинуть туда mysql весь, должно полегче стать.

А не станет узким местом канал с сервером, на который бд поставить? Скорость обмена всяко меньше будет, чем с диском напрямую

N
На сайте с 06.05.2007
Offline
419
#30

Xylitol, а станет. Или не станет.

Имелось ввиду, что вы диск SSD добавляете в тот же сервер.

Кнопка вызова админа ()
1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий