|
|
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
KoukiAleksandr Kuzminsky, При выборе движка руководствовался статьями, где для средств аналитики советуют использовать MyISAM. Транзакционность и надежность мне не первостепенны, главное производительность. В современных условиях какой из движков наиболее оптимально использовать для построения хранилища данных: InnoDB, XtraDB, MyISAM, Aria? С точки зрения производительности InnoDB лучше, чем MyISAM. Почему? Потому что в InnoDB в памяти кешируются и данные и индексы (строго говоря, в InnoDB все является индексом), а в MyISAM - только индексы. Допустим, если памяти много, больше, чем данных. Тогда с InnoDB чтения с диска не будет вообще, а запись будет последовательная и более-менее равномерная. Если же таблицы будут MyISAM, то Вы будете постоянно видеть чтение с диска и запись. Притом, IO будет преимущественно случайным, что есть плохо, если диски не SSD. (это не относится ко временным таблицам, это особый случай). Поэтому, я бы советовал InnoDB или XtraDB (что есть тоже InnoDB + фичи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 22:48:08 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Aleksandr KuzminskyMasterZivну неужели же я дожил до этого времени, когда хором люди в конфе по мусклю рекомендуют НЕ использовать ISAM ... не просто реально счастье... А что, раньше рекомендовали? Раньше по-крайней мере рекомендовали пробовать. Вообще, любое безапелляционное утверждения стоит подвергать сомнению. Если есть InnoDB, то MyISAM использовать не вижу смысла. Ну ок, full text индексы до недавнего не поддерживались в InnoDB. Кроме того, MyISAM не развивается как минимум лет пять. Хорошо, что в 5.5 InnoDB по дефолту, раньше многие использовали MyISAM потому что это был дефолт Это просто потому что у вас клиенты такие. Так зачем вы обобщаете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 23:08:13 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Aleksandr Kuzminsky, Спасибо, попробую с InnoDB поближе поработать. Хотя insert был на 10-20% медленнее, когда я выбирал движки, select'ы правда не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 23:18:14 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Kouki. Хотя insert был на 10-20% медленнее, когда я выбирал движки, select'ы правда не пробовал. Эа вы, что быть такого не может ! пацаны целую книжку про innodb написали ! Это, конечно, была ирония. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 23:30:01 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Поставил MariaDB. XtraDB действительно шустрее мускульного MyISAM в 2-3 раза у меня читает, правда запись в 1,5-2 раза медленнее. Можно ли как-либо поднять скорость записи? Транзакционность, целостность и пр. не первостепенны, как я говорил выше. Также решил попробовать для аналитики (мондриана) работать через представления: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Результат аналогичного запроса, приведенного в начале темы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. авторCopying to tmp table on disk 2,594670 54,27 Sorting result 1,162951 24,32 Sending data 0,516080 10,79 Copying to tmp table 0,252053 5,27 statistics 0,178931 3,74 converting HEAP to Aria 0,073775 1,54 removing tmp table 0,000964 0,02 Opening tables 0,000530 0,01 end 0,000409 0,01 checking permissions 0,000215 0,00 starting 0,000119 0,00 updating status 0,000087 0,00 preparing 0,000079 0,00 optimizing 0,000065 0,00 closing tables 0,000021 0,00 cleaning up 0,000021 0,00 freeing items 0,000019 0,00 Table lock 0,000016 0,00 System lock 0,000014 0,00 init 0,000010 0,00 query end 0,000006 0,00 executing 0,000004 0,00 План: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 22:29:45 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Kouki Можно ли как-либо поднять скорость записи? Транзакционность, целостность и пр. не первостепенны, как я говорил выше. Поставьте innodb_flush_log_at_trx_commit=2 Если innodb_log_file_size равен дефолту (5М) - поменяйте на что-то около 256М. Буфер пул побольше. RAID контролеер с батарейкой и write-back cache policy. SSD. Как-то так. Да, еще удалите индексы, которые не используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 22:49:06 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Kouki, стандартные фокусы для иннодб включают в себя увеличение innodb_buffer_pool_size и innodb_flush_log_at_trx_commit=0. Кроме того, то, что вам сейчас кажется, не обязательно кореллирует с теми результатами, которые вы бы получили при более строгом исследовании и длительных замерах. Данные в innodb занимают больше места, сам код сложнее. Иногда оно быстрее myisam, а иногда нет. Вот это вообще откровенная спекуляция фактами: "Почему? Потому что в InnoDB в памяти кешируются и данные и индексы (строго говоря, в InnoDB все является индексом), а в MyISAM - только индексы." . Кешируются данные myisam в памяти ОС. Кроме того, есть же специальная фича myisam_use_mmap. Не все так просто. Понятно, почему Percona педалирует везде innodb - они работают с платежеспособным сегментом. Людьми, которым надо прямо сейчас решать проблемы роста в задачах с дикой конкуренцией . И за это они готовы отдавать 500$/час за консультацию и надежду. Но большинство пользователей mysql не готовы или не считают нужным. Почему для них тоже педалируют innodb - мне не понятно. Это мнение даже в книжке прослеживается. Как-то тупенько. . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2014, 22:51:02 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Aleksandr Kuzminsky, Сделал: innodb-log-files-in-group = 4 innodb-log-file-size = 1G innodb-flush-log-at-trx-commit = 2 При загрузке данных через ETL-приложение включаю set autocommit = 0, размер коммита там же 10000, данных 7 млн строк. Нагрузка на процессор во время загрузки ~20%, сильно нагружается фс. Что еще можно сделать (не аппаратно), что бы разгрузить фс и увеличить скорость вставки? В идеале хотелось бы вообще транзакции не использовать при вставке, но думаю с xtradb так не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 15:54:34 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 17:33:43 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
KoukiAleksandr Kuzminsky, Сделал: innodb-log-files-in-group = 4 innodb-log-file-size = 1G Зачем такой большой лог? Какой у Вас размер базы, буфер пула и сколько всего памяти на сервере? Koukiinnodb-flush-log-at-trx-commit = 2 При загрузке данных через ETL-приложение включаю set autocommit = 0, размер коммита там же 10000, данных 7 млн строк. Нагрузка на процессор во время загрузки ~20%, сильно нагружается фс. Что еще можно сделать (не аппаратно), что бы разгрузить фс и увеличить скорость вставки? В идеале хотелось бы вообще транзакции не использовать при вставке, но думаю с xtradb так не получится. А как диск загружен? Сколько чтения, сколько записи? Запись случайная или последовательная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 18:18:07 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Aleksandr Kuzminsky, 4gb, innodb-buffer-pool-size = 2G Как характер нагрузки посмотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 18:27:57 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
KoukiAleksandr Kuzminsky, 4gb, innodb-buffer-pool-size = 2G 4 гигабайта - это всего памяти, я так понял? А размер базы какой? Нет смысла делать такой большой лог. Если MySQL упадет, оно потом может очень долго делать crash recovery. Сделайте два файла по 256G - будет более чем достаточно KoukiКак характер нагрузки посмотреть? iostat -dx 3 а лучше pt-diskstats ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 18:34:39 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Aleksandr Kuzminsky, Максимальный размер таблицы около 7Гб, общий размер бд около 11Гб. В доках пишут, что большой размер логов увеличивает производительность, а скорость восстановления не принципиальна для меня. Тестирую на обычной win7, диспетчер задач показывает 0 чтений, 12000 записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 19:47:17 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
KoukiМаксимальный размер таблицы около 7Гб, общий размер бд около 11Гб. Докупите памяти. Честное слово, у меня на лептопе больше. KoukiВ доках пишут, что большой размер логов увеличивает производительность, а скорость восстановления не принципиальна для меня. Логи нужны для того, чтобы запись на диск сделать как можно мольше последовательной. Лог размером в два раза больше, чем буфер пул не даст ровно никакого эффекта. Но раз скорость восстановления не принципиальна, то пусть будет. KoukiТестирую на обычной win7, диспетчер задач показывает 0 чтений, 12000 записей. 12000 записей в секунду? Не верю. Это монстр, а не диск. Вы бы не писали сюда о проблемах с производительностью :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 20:07:14 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
Aleksandr Kuzminsky, Не очень понял, если честно, что вы просили указать под "Сколько чтения, сколько записи? Запись случайная или последовательная?" и как это посмотрел в винде. ETL, через который я работаю, загружает данные порядка 5-9т записей в секунду. А как правильно перенести логи на другой диск не подскажете? Пробовал задавать нужную папку в innodb_log_group_home_dir и переносил туда файлы ib_logfile, но сервер не стартовал после этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2014, 17:08:19 |
|
||
|
Использование MySQL для хранилища данных
|
|||
|---|---|---|---|
|
#18+
KoukiAleksandr Kuzminsky, Не очень понял, если честно, что вы просили указать под "Сколько чтения, сколько записи? Запись случайная или последовательная?" и как это посмотрел в винде. ETL, через который я работаю, загружает данные порядка 5-9т записей в секунду. Сколько операций чтения в секунду, сколько - записей в секунду. Если хотите значительно подымать производительность, то надо добавлять память и сводить кол-во чтений к нулю. KoukiА как правильно перенести логи на другой диск не подскажете? Пробовал задавать нужную папку в innodb_log_group_home_dir и переносил туда файлы ib_logfile, но сервер не стартовал после этого. Вроде бы, правильно. Может с разрешениями была проблема. Смотрите error log. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 01:35:16 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38545975&tid=1835298]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 292ms |

| 0 / 0 |
