|
|
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
Есть БД1 с относительно большим кол-вом записей. Написал скрипт, который перерабатывает данные этой БД1 и пишет переработанные данные в новую БД2. Столкнулся с тем, что скорость обработки данных очень низкая - 40 записей в секунду. Ниже я опишу структуру БД2 и алгоритм втягивания данных. Считаю, что алгоритм программно описан корректно, так как это форум по БД, то программный код выкладывать не буду, но если из вышеописанного станет ясно, что туплю иммено в программе, тогда буду рыть в сторону кода, но пока что считаю, что проблема не в коде. Железо Мать 865, Проц Селерон 2,4Г, ОЗУ 512 После запуска скрипта, я начал моинторить загрузку ресурсов. Процессор оказался практически незагруженным. Апач ест всего 1-2% ресурсов, Мускул 3-9%. Файл подкачки занимает 1 Гиг. Буду признателен, если подскажите, в чем мои ошибки, а так же подскажите пути оптимизации конфигураци СУБД или принципов работы с СУБД. Струткутра Код: plaintext 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. Алгоритм: К БД1 делается запрос1 в результате которого получается таблица размером в 2 500 000 записей. Код: plaintext 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. На данный момент втянул 2 000 000 записей Впереди таблица размером в 16 000 000 записей. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 11:21:30 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
explain-ы для всех запросов пжалста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 11:25:01 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
и вывод mysqladmin ext var ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 11:26:12 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
>explain-ы для всех запросов пжалста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. >и вывод mysqladmin ext var Я не знаю, как выгрузить результат этой команды в файл. Это подойдет? Код: plaintext 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 12:14:04 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
А вы можете сравнить результат для перетягивания в ту же базу? Просто с префиксами в названии таблиц какими-нибудь, например... Интересует, понятное дело, скорость обработки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 14:01:13 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
Насколько я понял, для кажой строки происходит 3 селекта, чтобы определить 1 результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 14:14:10 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
DocAlА вы можете сравнить результат для перетягивания в ту же базу? Просто с префиксами в названии таблиц какими-нибудь, например... Интересует, понятное дело, скорость обработки) Думал об этом... буду пробовать. Валентин КНасколько я понял, для кажой строки происходит 3 селекта, чтобы определить 1 результат? Не всегда, в зависимости от как повел себя оператор ветвления. Но максимальное кол-во селектов - 3. На русском языке алгоритм выглядит так. Есть БД запчастей. Описание запчастей на двух языках. Я беру запись о запчасти из БД1 и проверяю: 1. Существует ли подобная запись о конкретной запчасти в БД2, если есть то, я знаю, что для этой записи уже есть описание, как таковое(описание создается, когда я добавляю запись о запчасти). Остается проверить, существует ли описание на конкретном языке или нет. Если нет описания на конкретном языке, то я добавляю это описание. 2. Если запчасти не существует, то я проверяю, существует ли описание запчасти, которую я буду втягивать. Описание может существовать, потому что я только что мог втянуть подобную по описанию запчасть. 3. Если описания не существует, то я завожу новое описание, затем завожу описание на конкретном языке. Если описание существует, то я определяю, существует ли описание на конкретном языке, если нет, то я завожу его. Далее имея описание я добавляю новую запчасть и описание к ней... Таблицы с префиксами 'mig_' - это таблицы, в которых хранятся соотвествия данных из разных БД. У меня все БД это InnoDB, настроенные по умолчанию. Единственное, что я сделал, это указал, что бы для каждой таблицы создавался свой файл данных, а не общий файл для всех данных. Так вот я не задавал этим файлам никаких статовых размеров.. Т.е. изначально это 10метровые файлы.. может часть ресурсов уходит на расширение файла??? Хотя были бы загружен ресурсы связанные с добавлением пространства, а так 10% - это и есть вся нагрузка, которую создает РНР-скрипт вместе с Мускулом. Я даже не представляю, в какую сторону рыть... Сейчас буду пробовать, что посоветовал DoсAl, но хотелось бы принимать более осознанные шаги... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 15:03:57 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
Уважаемый, Хрен ! Нашел ваши ответы в посте /topic/78623&pg=1 - очень поучительно, спасибо. Вот, если кому нужно скорость InnoDB, то вот я нашел еще пару ссылок http://www.linuxshare.ru/docs/software/SQL/mysql/manual/SEC463.html http://www.linuxshare.ru/docs/software/SQL/mysql/manual/InnoDB_start.html Буду пробовать переконфигугрировать СУБД и заново запускать. Всем большое спасибо за участие... ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 16:41:11 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
Перечитал, наверное, все, что было по настройке сервера - но так и не могу добиться быстрой работы сервера. Скорость вставок выросла, но вот скорость выполнения Селектов поднять не могу. Процессор в начале нагружается всего 20-30% а далее идет загрузка по полной программе на 95%. Вот этот запрос выполняется 1424208 ms. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2005, 12:44:35 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
Если файл подкачки маленький в винде, то так и будет. Вообще нежелательно грызть файло-подкачки, ставь так, чтобы MySQL влязил в виртуальную память. Докупи исчо памяти. Если таблицы большие - лучший вариант реплицировать из на другой сервер в MyIsam и в нем работать, т.к. что-то сильно большое время получчается при длине ключей 4 байта... Может это и странный совет, но скорее всего будет действительно быстрее и не будет грузить оперативную базу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 14:50:34 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
Файл подкачки 3 Гига, ОЗУ 2Гига. Что самое интересное, когда сервер СУБД остановлен, то файл подкачки 300-500 Метров, когда сервер запущен, то файл подкачки моментально увеличивается до 2 Гиг. В пул прописано сейчас 1,4Гига. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 15:48:30 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
мысли вслух: незнаю на чем вы это пишите но все же вот разбирался и писал когда то под синяк автор Примечание: при работе с большими источниками данных следует учитывать тот момент, что вытягивание на сторону клиента всех записей запроса часто не эффективно, предположим, что вы отображаете результат выборке в сетке вроде ClistCtrl. Пользователь не может обрабатывать выборки более 1000 записей, и использует постраничное листание набора строк или уточняющие запросы (фильтры). Для постраничного отбора следует использовать параметр команды SELECT – LIMIT: Например: SELECT * FROM Students LIMIT 0, 100 – здесь отбираются записи начиная с первой – отсчет начинается с нуля в количестве 100, т.е. с номерами: 1-100. Следующим шагом будет использование серверного курсора – концепция сервеных курсоров в том, чтобы не вытягивать данные на клиента – а сохранить на стороне сервера виртуальный указатель на текущую запись в результате выборки – затем по мере того как вы с помощью mysql_fetch_row будете переходить по записям нужные записи будет динамически передаваться с сервера к клиенту.для этого вместо mysql_store_result используйте функцию mysql_use_result. Например, так: if (!(res = mysql_use_result(&mysql))) die(); … и дальше то же что было раньше … Примечание: Преимущество функции mysql_use_result() заключается в том, что клиент требует меньше памяти для сохранения результирующего набора, поскольку он сохраняет только одну строку единовременно (и, так как это меньше перегружает память, то функция mysql_use_result() может быть быстрее). Недостатками являются: необходимость обрабатывать каждую строку быстро, чтобы избежать связывания сервера, невозможность произвольного доступа к строкам внутри результирующего набора (возможен только последовательный доступ к строкам), невозможность узнать количество строк в результирующем наборе до его полного извлечения. Критически важно: С при использовании mysql_use_result() для инициализации извлечения результирующего набора, клиент получает строки набора с сервера поочередно при повторных вызовах функции mysql_fetch_row(). Поскольку в этом процессе может возникнуть ошибка в соединении, NULL, полученный от mysql_fetch_row(), не всегда означает что мы пролистали все записи. В этом случае вам следует использовать mysql_eof(), чтобы выяснить, что же случилось. mysql_eof() вернет ненулевую величину, если конец результирующего набора был достигнут, и нуль, если произошла ошибка. mysql_query(&mysql,"SELECT * FROM students"); result = mysql_use_result(&mysql); while((row = mysql_fetch_row(result))){ … обработка текущей записи … } if(!mysql_eof(result)) // mysql_fetch_row(){ printf("Error: %s\n", mysql_error(&mysql)); // ошибка получения всех записей } Критически важно: Можно держать только одно открытое соединение, которое использует mysql_use_result, и это должно быть последнее созданное соединение. По умолчанию процесс mysqld закроет соединение после тридцати секунд неактивности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 18:57:25 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
black zorroмысли вслух: На деле не все так просто... Например поднимая систему учета, если я еще буду писать компоненты доступа к БД, проект растянется на огромное кол-во времени, потому что это будет узким звеном, да и изобретать велосипед неинтересно. Афтару. Поставь размер пула меньше. Если винда - в диспетчере посмотри, сколько mysqld.exe съедает виртуальной памяти, нужно чтобы все примерно влазило в оперативку, иначе пул будет просто неэффективным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 18:25:27 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
mysql-max-nt.exe Память: 66 688КБ Вирт. память: 1 632 740КБ. Объясните мне дуралею, что есть Память, а что есть "виртуальная память"? ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 19:07:20 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
4m@t!cфайл подкачки моментально увеличивается до 2 Гиг.то есть как это увеличивается? был, значит, 300М, стал 2Гига? Увеличение размера файла подкачки - это исключительно экстренная операция, фатально сказывающаяся на производительности. 4m@t!cОбъясните мне дуралею, что есть Память, а что есть "виртуальная память"? линка . ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 21:18:07 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
авторто есть как это увеличивается? был, значит, 300М, стал 2Гига? Жмакаю три пальца -> Диспетчер задач Windows Файл подкачки: 1,97 ГБ mysql-max-nt.exe Память: 66 688КБ Вирт. память: 1 632 740КБ. Через Службы останавливаю сервис MySQL Файл подкачки: 403 МБ В процессах службы естественно нет. SHOW VARIABLES InnoDB прояснит ситуацию? ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 21:25:22 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
попробуй выставить HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache=0 ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 22:35:59 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
зы нах те своп с двумя гигами озу? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 22:46:19 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
>зы нах те своп с двумя гигами озу? Я всегда делаю своп равный 1,5 от размера ОЗУ... А что плохого в большом свопе? ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2005, 10:40:09 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
в том, что он юзается . ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2005, 13:28:01 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
На какую настройку нужно обратить внимание, что бы загрузка процессора была повыше при запросах с обычным SELECT? Сейчас загрузка процессора всего 8-15%. А запрос должен выдать результаты группировок в таблице, состоящей из 3 000 000 записей. В результате такого запроса должно получиться 800 000 - 1 000 000 записей. Просмотрел ман уже надцать раз, а ума так и не приложу, как настроить... Подскажите параметры настройки. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 11:24:28 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
у менеджера памяти винды где-то есть настройка как долго держать в памяти закешированный файл. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 11:56:43 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
По памяти. Не смотри полную занятость памяти всеми процессами, добавь колонку в таскмене по виртуальной памяти, то что на присано в колонке память+ то что в колонке виртуальная память примерно и есть занятый объем памяти. в лучшем случае нужно чтобы mysql занимал не более 60-70% от физической памяти, иначе винда его обязательно будет сталкивать в кеш, а кеш - это сильно паристое штуко. Далее 1) БД положи на отдельный винт, потому что при селектах с группировками на больших объемах образуются временные таблицы, в которых происходит мердрж датасетов, а эти временные таблицы будут образовываться в темпах винды. 2) насколько я понял - данные хранятся в InnoDB, включи multiply tablespace сдампь базу и залей обратно. Это разнесет индексное пространство с пространством данных таблиц в разные файлы. На практике дает небольшое увеличесние быстродействия. 3) Увелич не основной пул innnodb, а дополнительные, но не сильно. Увелич переменные связанные с сортировкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 12:20:09 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
>По памяти На компе ОЗУ 2 ГБ mysql-max-nt.exe: Память: 1 537 084 КБ Вирт.п.: 1 652 340 КБ >1) БД положи на отдельный винт БД дежат на отдельном винте G: >2) насколько я понял - данные хранятся в InnoDB, Да. И сразу вопрос. Если есть таблицы, для которых не нужны транзакции, то может лучше их хранить в MyISAM??? Из каких соображений нужно выбирать типа таблицы? >включи multiply tablespace изначально сервер сконфигурирован как multiply tablespace >сдампь базу и залей обратно постоянно это делаю. >3) Увелич не основной пул innnodb Сейчас конфиг выглядит так: Код: plaintext 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 14:03:37 |
|
||
|
По каким критериям оценить скорость работы БД
|
|||
|---|---|---|---|
|
#18+
1) innodb_buffer_pool_size | 1468006400 сильно много, уменьш до 1024 Мб или до 512+256 Мб 2) отключи bdb 3) innodb_additional_mem_pool_size | 16777216 увеличь до 32 Мб 4) | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 10485760 буфер *2 логфайлы желательно увеличить до 96-128Мб, вообще непонятно как такая косая настройка получилась.... "Да. И сразу вопрос. Если есть таблицы, для которых не нужны транзакции, то может лучше их хранить в MyISAM??? Из каких соображений нужно выбирать типа таблицы?" MyIsam на практике лучше работают на больших объемах данных, но они не транзакционные. Обычно транзакции нужны при цепочках операций. Держать разнородные таблицы и делать к ним общие запросы можно, и все будет работать, вот только скорее всего через временные файлы (их сервер сам будет создавать) для мерждей результатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 15:16:46 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=640&tid=1853327]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
93ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 397ms |

| 0 / 0 |
