Основные направления улучшений в MySQL 5.7
Мы изучили презентации, заявления и выступления ведущих специалистов компании Oracle, участвовавших в разработке и тестировании продукта, и решили поделиться с вами полученными результатами. В версии MySQL 5.7 проделана значительная работа по улучшению производительности и масштабируемости системы для высоконагруженных проектов. Управление системой стало проще и безопаснее. Добавлены новые возможности, благодаря которым вы сможете работать с базами данных на совершенно ином уровне!
Основные улучшения:
- В 2 раза быстрее MySQL 5.6
- Улучшенный InnoDB
- Улучшена репликация
- Новая модель стоимостного оптимизатора. Улучшена производительность запросов.
- Улучшение схемы производительности
- MySQL SYS Schema
- Повышенный уровень безопасности
- Поддержка JSON
Показатели производительности MySQL 5.7 vs MySQL 5.
6Выжимка из презентации продуктового менеджера Oracle Мэтта Лорда, посвященной выходу версии MySQL 5.7 и презентации разработчика MySQL Алексей Копытова на DevConf. На рисунке ниже команда Oracle провела тест производительности систем 5.5, 5.6 и 5.7 с помощью утилиты sysbench на read-only нагрузках. В результате теста MySQL версии 5.7 показал в несколько раз большую производительность, чем его предшественники.
Также была выполнена оптимизация скорости соединения. В версии 5.7 скорость создания соединения в сравнении с версией 5.6 стала значительно быстрее, в особенности, при большом количестве клиентов.
Одним из основных направлений по улучшению в версии 5.7 была оптимизация в работе движка InnoDB. На графике ниже вы можете наблюдать результат сделанных улучшений на примере связки InnoDB и Memcached плагина.
В несколько раз выросло и количество соединений в секунду, которое способен обрабатывать MySQL.
Новые возможности в MySQL 5.
7Ниже приведена выжимка основных улучшений от представителей Oracle, из официального письма Geir Høydalsvik — старшего директора по разработке MySQL и выступления разработчика MySQL Дмитрия Ленева на DevConf 2016
Добавление поддержки JSON в MySQL
Благодаря недавно добавленной поддержке JSON в MySQL теперь вы можете сочетать гибкость NoSQL с мощью реляционной базы данных.
Оптимизированный бинарный формат позволяет серверу эффективно хранить, извлекать и искать данные JSON. Это расширяет возможности CREATE TABLE и ALTER TABLE, чтобы они могли создавать столбцы JSON, и расширяет функцию Field, разрешая INSERT и SELECT из полей с типом JSON.
Преимущества столбцов JSON
- Улучшенный бинарный формат хранения (быстрый доступ по ключам и к элементам массивов)
- Оптимизирован для чтения
- Кодировка Utf8mb4
- Валидация JSON при вставке
- Поддержка JSON элементов, таких как числа, строки, объекты, массивы.
Набор встроенных функций для взаимодействий с JSON
Позволяет пользователям создавать значения данных JSON из других реляционных данных, извлекать реляционные данные из значений данных JSON, анализировать структуру значений и текста JSON (валидность, длина, глубина, ключи), выполнять поиск внутри данных JSON и управлять ими.
- JSON_EXTRACT()/оператор ->, JSON_SEARCH(), JSON_CONTAINS(),….
- JSON_SET(), JSON_INSERT(), JSON_REMOVE(),….
- JSON_VALID(), JSON_LENGHT(), JSON_DEPTH(),…
- JSON_ARRAY(), JSON_OBJECT()
- JSON_QUOTE(), JSON_UNQUOTE()
Доступен компаратор для сравнения в SQL запросах, аналогичный компаратору DATE / TIME / DATETIME, который позволяет сравнивать скаляры JSON с константами SQL и скаляры JSON с скалярами JSON. Компаратор полагается на поддержку DOM. Компаратор преобразует константу SQL в скаляр JSON, а затем сравнивает значения.
Упорядочивание скалярных значений JSON
Функция создает ключи сортировки, которые необходимы внутренней функции файловой сортировки для правильной сортировки значений JSON. При упорядочивании скалярных значений JSON с помощью ORDER BY они будут возвращены в порядке, определенном компаратором JSON.
Анализатор выражений для сгенерированных столбцов.
Позволяет оптимизаторам находить возможности для использования любых индексов, определенных для сгенерированных столбцов. Один из предполагаемых вариантов использования этой функции — создание и автоматическое использование индексов для документов JSON.
Генерируемые столбцы
В операторах CREATE TABLE и ALTER TABLE доступна поддержка спецификации генерируемых столбцов. Из выражения, указанного при создании столбца вычисляются значения сгенерированного столбца.
Cтолбцы могут быть VIRTUAL (вычисление при чтении строк) или STORED (вычисление при вставке или обновлении строк), при этом индексы вы можете создать для обоих типов. Анализируя выражения, оптимизатор, кстати, старается использовать наилучший «функциональный» индекс.
Генерируемые столбцы: STORED vs VIRTUAL
STORED
→ Может быть PRIMARY KEY
→ BTREE, FULLTEXT, GIS
→ Добавление колонки требует перестроения таблицы и блокирует обновления
→ Добавление индекса in-place/не блокирует обновления
VIRTUAL
→ Не может быть PRIMARY KEY
→ Только BTREE
→ Добавление колонки мгновенно
→ Добавление индекса in-place/не блокирует обновления
Улучшения при выполнении запросов и в оптимизаторе.
Функция оценки затрат расширяет модель стоимостного оптимизатора, позволяет использовать оценки механизмов хранения: сколько строк и индексов таблицы присутствует в памяти. Оптимизатор использует различные константы затрат для расчета стоимости доступа к данным, которые находятся в памяти, и данным, которые необходимо прочитать с диска. В первоначальной реализации эти две константы стоимости имеют одинаковое значение по умолчанию, но могут быть изменены администратором сервера, чтобы оптимизатор использовал разные затраты на данные в буфере памяти и данные, необходимые для чтения с диска. Обратите внимание, что в настоящее время оценки того, находятся ли данные в памяти или их необходимо прочитать с диска, основываются только на эвристике. Точность этих оценок будет значительно улучшена, если поддержка этих оценок будет реализована отдельными механизмами хранения.
Другие оптимизации:
- Более умный учет условий при выборе порядка таблиц в join;
- Подзапросы из FROM обрабатываются как view;
- UNION ALL не требует временных таблиц;
- Полностью cost-based выбор индекса для ORDER BY . .. LIMIT N;
- Более оптимальное использование sort-buffer для несортируемых полей.
X plugin
Добавляет возможность оптимизации базы данных за счёт обновлённого протокола связи с веб-сервером, который способен производить асинхронные запросы. Также доступна новая утилита для более эффективной работы с веб-сервером и новый NoSQL API, который делает акцент на JSON, CRUD, а также document store.
EXPLAIN FOR CONNECTION
• Улучшения в EXPLAIN JSON (общая стоимость, по таблицам, кол-во обработанных данных)
• Улучшен режим ONLY_FULL_GROUP_BY и включен по умолчанию
Новый механизм подсказок оптимизатору /*+ … */:
– MAX_EXECUTION_TIME, BKA, MRR, ICP,
NO_RANGE_OPTIMIZATION,SEMIJOIN, SUBQUERY
Query Rewrite Plugin
Работает после обработки парсером перед оптимизацией и выполнением и позволяет изменить проблемный запрос без изменения приложения:
– Добавить подсказок оптимизатору
– Поменять порядок в join
– Решает проблему «плохих» запросов от ORM, сторонних приложений
– Больше не нужно использовать proxy в этих случаях
Улучшения в InnoDB
Производительность/масштабируемость
- Поддержка native partitioning
- Быстрее, меньше ресурсов
- Поддержка trasportable tablespaces
- General tablespaces
Улучшения Fulltext
Поддержка parser plugin
CJK и MeCab парсеры
Поддержка GIS индексов
Оптимизация создания индексов (create index bulk load)
Изменение размера buffer pool без рестарта
Сохранение горячих страниц из buffer pool для прогрева (—innodb-buffer- pool-dump-pct=)
Поддержка 32k и 64k страниц
Управление MERGE_THRESHOLD
Оптимизация работы с временными табличками (пользовательскими и intrisic)
Transparent Page Compression (punch-hole)
Репликация
GTID
– Включение GTID без downtime и перезапусков
– Slave без binlog
Поддержка репликации из многих источников
Изменение настроек фильтрации без перезапуска
Улучшения в полу-синхронной репликации
– Ожидание подтверждения от нескольких slave
– Фиксация транзакции только после подтверждения (корректный failover, решение проблемы с видимостью изменений)
– Отдельные потоки для отсылки и получения подтверждений
Безопасность
Безопасность по умолчанию
– Автогенерация пароля root@localhost при инсталляции
– Нет анонимов
– Простое и безопасное создание БД через mysqld —initialize
SSL
– Включен по умолчанию
– —ssl на клиенте его требует
– Автоматическое обнаружение и генерация ключей
– —require-secure-trasport на сервере
Поддержка политик смены паролей
Временная блокировка и разблокировка пользователей
Режимы AES шифрования
Расширена поддержка PROXY пользователей
– Теперь и при аутентификации через встроенные механизмы сервера
– Можно использовать для эмуляции ролей
Максимальная длина имени пользователя теперь 32
CREATE/DROP USER IF EXIST
PERFORMANCE_SCHEMA и SYS
Добавлена инструментация для:
– Блокировок метаданных (MDL)
– Транзакций
– Хранимых процедур и prepared statements
– Использования памяти
Аггрегированная статистика по:
– типам памяти/пользователям/хостам/соединениям
Включает данные:
– объем, количество выделений, high/low watermarks
Добавлены P_S таблицы для:
– Состояния slave (аналог SHOW SLAVE STATUS)
– Пользовательских переменные
– Статусных и системных переменных
Оптимизировано использование памяти
Многочисленные настройки (фильтрация по пользователям, включение/выключение истории для соединений)
SYS schema (ps_helper) теперь доступен по умолчанию
GIS
– Выкинули старый код и перешли на Boost. Geometry !
– Для вычислений и операций
– Меньше ошибок, больше функциональности
Импорт/экспорт из/в
– GeoHash
– GeoJSON
Новые вспомогательные функции ST_Distance_Sphere(), ST_MakeEnvelope(),…
Реализовали поддержку R-tree в InnoDB
– Транзакции/ACID/MVCC при работе с GIS
MySQL Document Store
Использует новый JSON тип и индексы на генерируемые столбцы
Оперирует коллекциями JSON объектов
Новый MySQL Shell
— JavaScript, Python, SQL
Коннекторы с новым CRUD API:
– Java, NodeJS, Net, Python
– Поддерживают работу с коллекциями и таблицами
– Цепочки методов (method chaining)
– Асинхронное выполнение
– Поддерживает parameter binding
С полным списком улучшений вы можете ознакомиться по ссылкам на официальный сайт:
- Что нового в MySQL 5.7 — https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell. html
- Изменения в версии MySQL 5.7.8 — https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html
Кстати говоря, нашим клиентам уже доступен хостинг с MySQL 5.7! Вы можете абсолютно бесплатно протестировать работу вашего сайта на новой базе MySQL 5.7 в течение 14 дней с момента регистрации.
MySQLi vs MySQL | PHPClub
Keepun
Новичок
- #1
MySQLi vs MySQL
В чем отличия MySQLi от обычного модуля MySQL?
MySQL — набор функций
MySQLi — класс, с дополнительными данными о базе
В чем еще?
Breeze
goshogun
- #2
вообще-то mysqli имеет и процедурную и объектную реализацию.
http://ru2.php.net/manual/en/book.mysqli.php
вкратце: mysqli умеет то, чего не умеет и никогда не будет уметь mysql.
Wicked
Новичок
- #3
плэйсхолдерами
Alexandre
PHPПенсионер
- #4
Ответ: новым API
модуль MySQL был разработан для MySQL API 3. 23 и ниже
и в пятой ветке PHP оставлен для совместимости со старыми версиями (PHP4)
модуль MySQLi разработан для MySQL API 4.0 и выше
Keepun
Новичок
- #5
А с скоростью как?
Ведь MySQLi просит больше данных от базы.
Да и деллка общая. Только обычный, ИМХО, напрямую дергает за API, а i дополнительные манипуляции совершает…
newARTix
Новичок
- #6
а MySQL поддерживает шифрованное соединение?
Keepun
Новичок
- #7
Автор оригинала: newARTix
а MySQL поддерживает шифрованное соединение?Нажмите для раскрытия. ..
Кажись нет…
В 99% случаев это нафиг не надо, потому что база и так на localhost висит…
флоппик
promotor fidei
- #8
В 99% случаев это нафиг не надо, потому что база и так на localhost висит…
Нажмите для раскрытия…
Поверь мне, здесь очень много таких, у кого база висит отдельно.
Alexandre
PHPПенсионер
- #9
Поверь мне, здесь очень много таких, у кого база висит отдельно.
Нажмите для раскрытия…
хоть База висит на другом серваке и все-таки используем простое соединение
защиту в этом случае надо разделять на уровне кластера, просто на IP сервака БД — закрыть все входящие соединения по мускольному порту на роутере
флоппик
promotor fidei
- #10
Alexandre, в общем случае — да. Но всегда есть исключения.
Alexandre
PHPПенсионер
- #11
согласен, исключения есть всегда
но, даже у нас, когда не было кластера а два сервака «открыто» висели в сети,
то мы просили провайдера закрывать мускульный порт для всех входящих соединений за исключения нашего сервака.
Хотя это можно сделать на уровне iptables
MySQL против MySQLi при использовании PHP
спросил
Изменено 3 года, 1 месяц назад
Просмотрено 231 тысяч раз
Что лучше, MySQL или MySQLi? И почему? Что я должен использовать?
Я имею в виду лучше не только с точки зрения производительности, но и любой другой соответствующей функции.
- php
- mysql
- mysqli
Если вы взглянете на обзор улучшенных расширений MySQL, там должно быть все, что вам нужно знать о различиях между ними.
Основные полезные функции:
- Объектно-ориентированный интерфейс
- поддержка подготовленных операторов
- поддержка нескольких операторов
- поддержка транзакций
- расширенные возможности отладки 9Поддержка встроенного сервера 0015.
6
Существует страница руководства, посвященная выбору между mysql, mysqli и PDO по адресу
- http://php.net/manual/en/mysqlinfo.api.choosing.php и .
- http://www.php.net/manual/en/mysqlinfo.library.choosing.php
Команда PHP рекомендует mysqli или PDO_MySQL для новой разработки:
Рекомендуется использовать расширения mysqli или PDO_MySQL. Не рекомендуется использовать старое расширение mysql для новой разработки. Подробная матрица сравнения характеристик приведена ниже. Общая производительность всех трех расширений считается примерно одинаковой. Хотя производительность расширения составляет лишь часть общего времени выполнения веб-запроса PHP. Часто влияние составляет всего 0,1%.
На странице также есть матрица функций, сравнивающая API расширений. Основные различия между mysqli и mysql API заключаются в следующем:
mysqli mysql Статус разработки Только техническое обслуживание Объявлено об отказе от поддержки жизненного цикла Active Long Term* Рекомендуется Да Нет ООП API Да Нет Асинхронные запросы Да Нет Подготовка на стороне сервера. Заявления Да Нет Хранимые процедуры Да Нет Множественные утверждения Да Нет Транзакции Да Нет Функциональность MySQL 5.1+ Да Нет
. /manual/en/mysqlinfo.library.choosing.php и очень подробная статья в блоге по адресу Я отказался от использования mysqli. Он просто слишком нестабилен. У меня были запросы, которые приводили к сбою PHP при использовании mysqli, но отлично работали с пакетом mysql. Также происходит сбой mysqli в столбцах LONGTEXT. Эта ошибка в различных формах появлялась по крайней мере с 2005 года.0077 и остается сломанным . Честно говоря, я бы хотел использовать подготовленные операторы, но mysqli просто недостаточно надежен (и, похоже, никто не беспокоится об этом). Если вам действительно нужны подготовленные операторы, используйте PDO. 7 MySQLi означает улучшенный MySQL. Это объектно-ориентированный интерфейс для привязок MySQL, который упрощает использование. Он также предлагает поддержку подготовленных операторов (которые очень полезны). Если вы используете PHP 5, используйте MySQLi. Лучше PDO; это менее грубый интерфейс, а также предоставляет те же функции, что и MySQLi. Использование подготовленных операторов хорошо, поскольку исключает возможность SQL-инъекций; использование подготовленных операторов на стороне сервера — это плохо, потому что это увеличивает количество обращений туда и обратно. для меня подготовленные выписки — обязательная функция. точнее, привязка параметров (которая работает только с подготовленными операторами). это единственный действительно разумный способ вставки строк в команды SQL. я действительно не доверяю функциям «убегания». соединение с БД является бинарным протоколом, зачем использовать подпротокол, ограниченный ASCII, для параметров? 2 Главная / Технологии / IT / Базы данных / Разница между MySQL и расширением MySQLi Автор: Indika MySQL против расширения MySQLi MySQL — популярная система управления реляционными базами данных (RDBMS). Это СУБД с открытым исходным кодом, которая широко используется даже на крупных предприятиях, таких как Википедия, Google и Facebook. PHP (расшифровывается как PHP: препроцессор гипертекста) — это язык сценариев на стороне сервера, особенно подходящий для разработки динамических и интерактивных веб-страниц. MySQL и MySQLi — это два расширения, предназначенные для взаимодействия PHP-приложений с базами данных MySQL. Эти два расширения реализованы с использованием фреймворка расширений PHP и предоставляют PHP-программистам API (интерфейс прикладного программирования) для взаимодействия с базами данных MySQL. Что такое расширение MySQL? Расширение MySQL — это первое расширение, предназначенное для разработки приложений PHP, которое можно использовать для взаимодействия с базами данных MySQL. Это предоставляет программистам PHP процедурный интерфейс для взаимодействия с базами данных MySQL. Это расширение предназначено для использования только с версиями MySQL старше версии 4.1.3. Несмотря на то, что это можно использовать с MySQL версии 4.1.3 или новее, любые новые функции в этих версиях будут недоступны. В настоящее время над расширением MySQL не ведется никаких активных разработок, и оно не рекомендуется для новых проектов. Дальнейшее расширение MySQL не поддерживает подготовленные операторы на стороне сервера или подготовленные операторы на стороне клиента. Он также не поддерживает хранимые процедуры или наборы символов. Что такое расширение MySQLi? Расширение MySQLi (также называемое улучшенным расширением MySQL) — это новое расширение, предназначенное для разработки приложений PHP, которые могут взаимодействовать с базами данных MySQL. Это расширение разработано для максимального использования функций, доступных в версии MySQL 4.1. 3 или новее. Расширение MySQLi впервые включено в PHP версии 5 и включено во все более поздние версии. В дополнение к процедурному интерфейсу для PHP-программистов, расширение MySQLi также предоставляет объектно-ориентированный интерфейс. Это также обеспечивает поддержку подготовленных операторов на стороне клиента/сервера и нескольких операторов. Кроме того, он поддерживает наборы символов и хранимые процедуры. В чем разница между расширением MySQL и MySQLi? Несмотря на то, что и расширение MySQL, и расширение MySQLi являются расширениями, предназначенными для разработки приложений PHP, которые могут взаимодействовать с базами данных MySQL, расширение MySQLi имеет некоторые ключевые усовершенствования по сравнению с расширением MySQL. Во-первых, расширение MySQL рекомендуется использовать с версиями MySQL старше 4.1.3, а расширение MySQLi рекомендуется использовать с версиями MySQL 4.1.3 или новее. Кроме того, расширение MySQLi включено только в PHP 5 или более поздние версии. Разница между MySQL и расширением MySQLi