2016-02-16 3 views
0

Сейчас мы используем базу данных MySQL версии 5.1.72. Это не кластерная база данных, а обычная. 64-разрядный («mysql Ver 14.14 Distrib. 5.1.72 для sun-solaris2.11 (x86_64) с использованием readline 6.3»). Мы используем выделенные серверы, а не избыточное облачное решение. Я испытал, что чем больше клиентов, мы втиснуть в нашу платформу, тем больше проблем, которые мы получаем сВыбор базы данных

2016-02-15 13:26:36,737 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 1205, SQLState: 41000> 
2016-02-15 13:26:36,737 ERROR [org.hibernate.util.JDBCExceptionReporter] - <Lock wait timeout exceeded; try restarting transaction> 
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert: [com.marin.core.server.model.TableName] 

Может переключиться на другую базу данных нам помочь? Или, может быть, просто кластерная версия MySQL? В некоторых таблицах есть миллионы строк. Самая большая таблица имеет размер около 5 ГБ. В нем много индексов.

ответ

0

Обычно такая проблема обусловлена ​​

  • Неадекватная индексация. Часто это происходит из-за индексации отдельных столбцов и невозможности использовать «составные» индексы для лучшей выгоды.
  • Громоздкие данные, приводящие к дополнительным ввода-выводам (что является медленной частью любого запроса). Это может быть устранено путем более тщательного выбора типов данных и/или нормализации.
  • Неэффективные запросы - есть определенные конструкции, которые, как известно, являются неэффективными, и могут быть переформулированы, чтобы добиться значительного увеличения производительности.

Предлагается установить long_query_time=1 и включить медленный журнал. Затем подождите один день и запустите mysqldumpslow -s t или pt-query-digest, чтобы узнать, что работает. (Обратите внимание: этот тайм-аут обычно проявляется в запросах, занимающих почти ровно 50 секунд.)

Затем давайте посмотрим на запросы и SHOW CREATE TABLE, исправим их и научим ваших пользователей тому, как избежать повторения проблемы.

+0

Но если у вас есть автоинкрементный первичный ключ одного столбца, он всегда будет иметь индекс. –

+0

Этот индекс полезен, только если у вас есть этот 'id' для поиска. Если вместо этого вам нужно выбрать 'name',' id' бесполезен. –

+0

Многие таблицы имеют составной ПК, но у многих есть автоинкрементный столбец с одним столбцом. Есть и другие, которые имеют индексы на отдельных столбцах, которые не являются частью ПК. –

Смежные вопросы