Оптимизация производительности базы данных mysql. Оптимизация производительности mysql
Оптимизация производительности сервера MySQL
У меня есть VPS-сервер в Vultr с 8 ГБ RAM и 4vCPU, и я хочу получить оптимизированные настройки mysql. У меня есть БД около 170 таблиц InnoDB, но в основном они не содержат большого количества данных. Есть 2 таблицы MyISAM, но с 150k строк, каждый из которых я хотел бы увеличить до 350k.
Задача состоит в том, что я выполняю геометрические вычисления в таблице с длинными/лат-данными для каждого расчета, которое должно пройти через полные 150 тыс. Строк, определить, какие из них являются ближайшими (в пределах 5 миль) от расстояния и чем дают только эти данные. Это, очевидно, очень ресурсный голод. Поэтому увеличение от 150 тыс. Строк до 200 тыс. Строк означает, что запрос занимает 1сек дольше, а увеличение до 350 тыс. Строк занимает дополнительно 3-4 секунды на запрос. Я не могу обновить сами запросы на этом этапе, но могу как можно больше работать над улучшением mysql.
Я уже начал обновлять свои настройки MySQL и значительно улучшил производительность. Здесь выходной сигнал от вибрирующей-праймера:
версии MySQL 5.5.55-0ubuntu0.14.04.1 x86_64
Uptime = 2 дня 12 часов 1 мин 56 сек Средн. КООТ = 61 Всего Вопросы = 2665033 Темы Connected = 3
медленных запросов Медленный запрос журнала не включен. Current long_query_time = 10.000000 sec. У вас есть 0 из 2665054, длина которых превышает 10.000000 сек. для завершения Ваш long_query_time кажется прекрасным
BINARY UPDATE LOG Бинарный журнал обновлений НЕ включен. Вы не будете в состоянии сделать точку восстановления времени См http://dev.mysql.com/doc/refman/5.5/en/point-in-time-recovery.html
РАБОЧИЙ Threads Текущий thread_cache_size = 8 ток Threads_cached = 5 ток threads_per_sec = 0 Исторические threads_per_sec = 0 Ваш thread_cache_size прекрасно
MAX CONNECTIONS Ток max_connections = 151 Текущие потоки_связанные = 3 Historic max_used_connections = 9 Количество используемых соединений составляет 5% от настроенного максимума гм. Вы используете менее 10% настроенных max_connections. понижающего max_connections может помочь избежать чрезмерное выделения памяти См «использования памяти» раздел, чтобы убедиться, что вы не чрезмерно выделять
INNODB STATUS Текущего InnoDB индексного пространства = 35 M Текущего пространства InnoDB данных = 56 M Текущего InnoDB буферного пула бесплатно = 25% ток innodb_buffer_pool_size = 128 M в зависимости от того, сколько места ваших индексов InnoDB занимают может быть безопасным увеличить это значение до 2/3 от общего объема системной памяти
ИСПОЛЬЗОВАНИЕ ПАМЯТИ Макс. Память Ever Alloc ated: 4.48 G Конфигурированные максимальные поточные буферы: 1,53 G Настроенные максимальные глобальные буферы: 4.39 G Конфигурированный максимальный предел памяти: 5,92 G Физическая память: 7.79 G предел максимальной памяти, как представляется, в пределах допустимых норм
КЛЮЧ БУФЕР Текущий индекс MyISAM пространство = 79 М ток key_buffer_size = 256 М Ключ Скорость промах кэша составляет 1: 9866 свободный коэффициент Ключ буфера = 79% Ваш key_buffer_size, кажется, хорошо
QUERY CACHE кэш запросов включен Текущий query_cache_size = 4,00 G Текущий query_cache_used = 889 M Текущий query_cache_limit = 4 M Текущий запрос коэффициент заполнения кэша памяти = 21.71% Текущий запрос_cache_min_res_unit = 4 K Ваш query_cache_size кажется слишком высоким. Может быть, вы можете использовать эти ресурсы в других MySQL не будет результатов запроса кэша, размер которых превышает query_cache_limit в размере
СНП ОПЕРАЦИИ Текущий sort_buffer_size = 2 M ток read_rnd_buffer_size = 256 K Сортировка буфера, кажется, хорошо
JOINS Текущий join_buffer_size = 4,00 M Вы имели 72592 запросов, где объединение не может использовать индекс правильно join_buffer_size> = 4 M Это не рекомендуется Вы должны включить «срубы запросы, не использующих-я ndexes " Затем найдите не индексированные соединения в журнале медленных запросов.
ОТКРЫТЫХ ФАЙЛЫ LIMIT Текущего open_files_limit = 2209 файлов open_files_limit обычно должно быть установлен, по крайней мере, 2x-3x что из table_cache, если у вас есть использование тяжелого MyISAM. Ваше значение open_files_limit, кажется, хорошо
ТАБЛИЦА CACHE Текущий table_open_cache = 1024 таблицы Текущие table_definition_cache = 1024 таблицы Вы есть в общей сложности 702 таблиц у вас есть 1024 открытых таблиц. Текущий table_cache ударил ставка составляет 55% , в то время как 100% из кэша таблицы используется Вы, вероятно, следует увеличить table_cache
TEMP TABLES Текущий max_heap_table_size = 16 M ток tmp_table_size = 16 M Of 162009 временных таблицах , 1% были созданы на диск создано отношении
dba.stackovernet.com
Оптимизация производительности базы данных mysql
У меня есть база данных с относительно небольшими таблицами и одна большая таблица с примерно 10 миллионами строк (11 столбцов), которые я бы хотел оптимизировать. Таблица выглядит следующим образом:
- Id: (INT 11, первичный ключ)
- Codigo: (LONGTEXT)
- Act_mas: (двойной)
- Act_menos: (двойной)
- Ind_mas: (двойной)
- Ind_menos: (двойной)
- Cap_mas: (двойной)
- Cap_menos: (двойной)
- Mensaje: (LONGTEXT)
- Fecha: (DateTime)
- SuministrosId (INT 11, это внешний ключ таблицы с 62 строк, 21 столбцов, имеет еще 2 внешнего ключа, один с 44 строк и 11 колонны и другая с 2 рядами и 2 колонки)
Я думаю, я мог бы изменить тип данных Codigo и Mensaje к чему-то, как VARCHAR(10), так как обычно значение имеет менее 10 символов и, вероятно, LONGTEXT является излишеством.
Я мог бы также изменить тип данных столбца, от Act_mas к Cap_menos, чтобы INT, так как все значения должны быть меньше, чем 1.000.000 (на данный момент самой большой ценностью является 795,600, и это очень странно иметь такое значение) ,
В базе данных и в таблице используется двигатель «InnoDB».
На самом деле для запроса требуется 0-. Может быть, это не слишком много, но я думаю, что это может быть намного меньше. Я попытался изменить тип данных некоторых столбцов, но это было ужасно медленно, и я должен был остановить его, должен ли я дать еще одну попытку? Также я добавил индекс к SuministrosId, но он оказался таким же.
Если необходимы другие данные, не стесняйтесь спрашивать. Заранее спасибо! (И простите за мой английский язык: с)
EDIT
Компьютерная информация:
CPU: Intel (R) Xeon (R) CPU E5-2609 v4 @ 1,70 ГГц
Оперативная память: 32 GB
ОС: Windows Server 2012 R2 Standard
MySQL Версия: 5.7.11
база данных используется внешняя программа Java, которая обычно использует запросы, как в описанном выше: SELECT * FROM consumos WHERE SuministrosId = 4 and Fecha >= "2015-01-01", это наиболее часто используемый запрос, так как это «ядро» для работа сделана здесь.Некоторые другие запросы используются для перечисления таких клиентов, как: SELECT * FROM clientes, или SELECT * FROM suministros. Но эти таблицы очень маленькие, и это не проблема.
SHOW CREATE TABLE для рыбку:
CREATE TABLE 'consumos' ( 'Id' int(11) NOT NULL AUTO_INCREMENT, 'Codigo' longtext NOT NULL, 'Act_mas' double NOT NULL, 'Act_menos' double NOT NULL, 'Ind_mas' double NOT NULL, 'Ind_menos' double NOT NULL, 'Cap_mas' double NOT NULL, 'Cap_menos' double NOT NULL, 'Mensaje' longtext NOT NULL, 'Fecha' datetime NOT NULL, 'SuministrosId' int(11) NOT NULL, PRIMARY KEY ('Id'), KEY 'IX_FK_Contadorsuministrosset' ('SuministrosId'), KEY 'Fecha' ('Fecha'), CONSTRAINT 'FK_Contadorsuministrosset' FOREIGN KEY ('SuministrosId') REFERENCES 'suministros' ('Id') ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=13002432 DEFAULT CHARSET=latin1Запрос объяснить:
Профиль:
dba.stackovernet.com
Оптимизация производительности базы данных mysql
У меня есть база данных с относительно небольшими таблицами и одна большая таблица с примерно 10 миллионами строк (11 столбцов), которые я бы хотел оптимизировать. Таблица выглядит следующим образом:
- Id: (INT 11, первичный ключ)
- Codigo: (LONGTEXT)
- Act_mas: (двойной)
- Act_menos: (двойной)
- Ind_mas: (двойной)
- Ind_menos: (двойной)
- Cap_mas: (двойной)
- Cap_menos: (двойной)
- Mensaje: (LONGTEXT)
- Fecha: (DateTime)
- SuministrosId (INT 11, это внешний ключ таблицы с 62 строк, 21 столбцов, имеет еще 2 внешнего ключа, один с 44 строк и 11 колонны и другая с 2 рядами и 2 колонки)
Я думаю, я мог бы изменить тип данных Codigo и Mensaje к чему-то, как VARCHAR(10), так как обычно значение имеет менее 10 символов и, вероятно, LONGTEXT является излишеством.
Я мог бы также изменить тип данных столбца, от Act_mas к Cap_menos, чтобы INT, так как все значения должны быть меньше, чем 1.000.000 (на данный момент самой большой ценностью является 795,600, и это очень странно иметь такое значение) ,
В базе данных и в таблице используется двигатель «InnoDB».
На самом деле для запроса требуется 0-. Может быть, это не слишком много, но я думаю, что это может быть намного меньше. Я попытался изменить тип данных некоторых столбцов, но это было ужасно медленно, и я должен был остановить его, должен ли я дать еще одну попытку? Также я добавил индекс к SuministrosId, но он оказался таким же.
Если необходимы другие данные, не стесняйтесь спрашивать. Заранее спасибо! (И простите за мой английский язык: с)
EDIT
Компьютерная информация:
CPU: Intel (R) Xeon (R) CPU E5-2609 v4 @ 1,70 ГГц
Оперативная память: 32 GB
ОС: Windows Server 2012 R2 Standard
MySQL Версия: 5.7.11
база данных используется внешняя программа Java, которая обычно использует запросы, как в описанном выше: SELECT * FROM consumos WHERE SuministrosId = 4 and Fecha >= "2015-01-01", это наиболее часто используемый запрос, так как это «ядро» для работа сделана здесь.Некоторые другие запросы используются для перечисления таких клиентов, как: SELECT * FROM clientes, или SELECT * FROM suministros. Но эти таблицы очень маленькие, и это не проблема.
SHOW CREATE TABLE для рыбку:
CREATE TABLE 'consumos' ( 'Id' int(11) NOT NULL AUTO_INCREMENT, 'Codigo' longtext NOT NULL, 'Act_mas' double NOT NULL, 'Act_menos' double NOT NULL, 'Ind_mas' double NOT NULL, 'Ind_menos' double NOT NULL, 'Cap_mas' double NOT NULL, 'Cap_menos' double NOT NULL, 'Mensaje' longtext NOT NULL, 'Fecha' datetime NOT NULL, 'SuministrosId' int(11) NOT NULL, PRIMARY KEY ('Id'), KEY 'IX_FK_Contadorsuministrosset' ('SuministrosId'), KEY 'Fecha' ('Fecha'), CONSTRAINT 'FK_Contadorsuministrosset' FOREIGN KEY ('SuministrosId') REFERENCES 'suministros' ('Id') ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=13002432 DEFAULT CHARSET=latin1Профиль:
dba.stackovernet.com
MySQL. Оптимизация производительности | Книги
Опубликовано: 5 сен 2012 в 16:40
Автор: Шварц Б., Зайцев П., Ткаченко В.
Год: 2010
Язык: Русский
Размер: 7,9 Мб
Страниц: 832
Формат: pdf
Описание:
Чрезвычайно полезная книга, которая станет безусловным лидером для любого вебмастера. Об этой книге сказано множество отзывов в сети и ее уже давно признали лучшим изданием по MySQL и СУБД в принципе.
Авторы донесли в простой и доступной форме, как создавать быстрые и надежные интернет приложения, работающие с базами данных MySQL. Особой изюминкой является нестандартное мышление и выработка нетривиального подхода к разработке у читателя. Прочитав данную книгу вы сможеет создавать полноценные приложения, использующие всю мощь СУБД.
Используемые методы позволяют по максимуму задействовать всю производительность MySQL. Авторы предлагают свои настройки веб-сервера и операционной системы для раскрытия потенциала СУБД. Особое внимание во втором издании оказано отказоустойчивости оборудования, а также нарушению целостности данных. Также рассмотрены безопасные методы масштабировани приложений, которые основаны на репликации.
Книга подойдет как новичкам, так и профессиональным разработчикам, которые тоже найдут нужную информацию по повышению квалификации.
Внимание! Все размещенные на сайте книги предназначены исключительно для ознакомления, поэтому после ознакомления вы обязаны удалить их со своего компьютера!
О ремонте macbook приходится задумываться только при его поломке. Однако, более верным подходом будет нахождение качественного сервиса заранее, чтобы случись что, можно было сразу же обратиться.
www.securityscripts.ru
Оптимизация производительности MySQL - онлайн-курс на Webew
Курс охватывает различные аспекты оптимизации производительности MySQL. Вы научитесь повышать производительность серверов и приложений своей компании под руководством специалиста.
Авторы и ведущие курса:
- Павел Пушкарев — управляющий партнер Консалтинговой группы MD, сертифицированный разработчик и администратор баз данных MySQL.
- Григорий Рубцов — генеральный директор компании «Станигост», руководитель проекта SQLinfo.ru, сертифицированный разработчик приложений и администратор кластера MySQL.
Внимание! Настоящий онлайн-курс — авторский продукт и не является авторизованным курсом MySQL AB или Sun Microsystems. О планах проведения авторизованных курсов вы можете узнать на сайте MySQL AB.
Предварительная подготовка:
Предполагается, что участник курса умеет подключаться к серверу MySQL, знаком с синтаксисом запросов SELECT, INSERT, UPDATE, ALTER TABLE и CREATE TABLE, может построить составной запрос с использованием JOIN, имеет базовые навыки работы в Unix-shell.
Продолжительность курса: 2 месяца.
Программа курса:
1. Цели и средства оптимизации
1.1. Нужна ли оптимизация MySQL?
1.2. Пути оптимизации производительности.
1.3. Методы поиска узких мест.
1.4. Задание: Поиск узких мест в производительности приложения.
2. Оптимизация простых запросов.
2.1. Типы ключевых полей (индексов).
2.2. Префиксные индексы.
2.3. Составные индексы.
2.4. Способы хранения индексов.
2.5. Доступ к информации о состоянии индекса (SHOW INDEX, INFORMATION_SCHEMA).
2.6. Использование EXPLAIN.
2.7. Базовый алгоритм поиска по ключу.
2.8. Указание на использование конкретного индекса (USE/FORCE/IGNORE INDEX).
2.9. Задание: оптимизация простых запросов.
2.10. Другие типы индексов: полнотекстовый индекс, пространственный индекс.
3. Оптимизация составных запросов.
3.1. Методы поиска медленных запросов (журнал медленных запросов, SHOW FULL PROCESSLIST).
3.2. Архитектура MySQL.
3.3. Принцип работы оптимизатора запросов MySQL.
3.4. Оптимизация сортировки и группировки.
3.5. Задание: оптимизация запросов с сортировкой и группировкой.
3.6. Профилирование запросов
3.7. Оптимизация объединения таблиц (JOIN).
3.8. Воздействие на путь исполнения запроса, использование STRAIGHT_JOIN.
3.9. Оптимизация подзапросов.
3.10. Задание: оптимизация JOIN и подзапросов.
4. Оптимизация способа хранения данных.
4.1. Различные механизмы хранения.
4.2. Особенности MyISAM.
4.3. Особенности InnoDB.
4.4. Особенности MEMORY.
4.5. Другие механизмы хранения (NDB, ARCHIVE, BLACKHOLE).
4.6. Какой механизм хранения выбрать?
4.7. Разбивка таблиц (PARTITIONING).
4.8. Задание: Выбор оптимального механизма хранения.
4.9. Типы данных и занимаемый ими объем.
4.10. Особенности хранения BLOB-полей.
4.11. Использование PROCEDURE ANALYZE().
4.12. Задание: Оптимизация используемых типов данных.
5. Оптимизация конфигурации сервера MySQL.
5.1. Просмотр статуса и текущей конфигурации MySQL.
5.2. Способы изменения конфигурации сервера MySQL.
5.3. Алгоритмы кэширования в MyISAM и InnoDB.
5.4. Использование кэшей индексов.
5.5. Кэш запросов - возможности и ограничения.
5.6. Как выявить узкие места в конфигурации?
5.7. Задание: выбор оптимальной конфигурации MySQL.
5.8. Параметры ОС и физического сервера, влияющие на производительность MySQL.
6. Оптимизация структуры базы данных.
6.1. Нормальная форма базы данных.
6.2. Влияние нормализации на производительность.
6.3. Проведение денормализации, методы сохранения целостности данных.
6.4. Задание: Нормализация базы данных.
6.5. Задание: Оптимизация производительности путем денормализации.
6.6. Нестандартные подходы к оптимизации.
6.7. Задание: задачи по оптимизации.
Вы не нашли в программе те знания и навыки, которые хотели бы приобрести? Напишите нам электронное письмо или позвоните по телефону (495) 544-20-47.
Стоимость участия: 14800 Р. (НДС не облагается)
online.webew.ru