Ставьте лайк и смотрите снова, формируйте привычку, ищите в WeChat【Третий принц Ао Бин] Обратите внимание на этот инструмент человека, который борется за выживание в Интернете.
эта статьяGitHub github.com/JavaFamilyВключено, и есть полные тестовые площадки, материалы и мой цикл статей для интервью с производителями первой линии.
предисловие
Я - вечеринка в заголовках, и названия всех статей - просто мои уловки. У нас должно быть скромное сердце, поэтому я надеюсь, что каждый сможет усердно учиться с менталитетом пустой чашки и вместе добиться прогресса.
Я думаю, что все знакомы с базой данных, я думаю, что бы вы ни писали, база данных никогда ранее не использовалась, и это неотъемлемая часть нашей проектной системы.
Поспрашивав вокруг меня, друзья и компании используют либо самостоятельно разработанную, либо комплексную версию MySQL, так что друзья, которые захотят увидеть Oracle, могут быть разочарованы, но это не повлияет на ваши общие знания о базах данных.
текст
Вы знаете базовую структуру MySQL? Можете ли вы дать мне грубый набросок этого на бумаге?
Хорошо, давайте разбираться по порядку, что такое коннектор?
Когда мы хотим сделать запрос, первым шагом будет ссылка на базу данных, а затем коннектор в это время подключится к нам.
Он отвечает за установление связей с клиентами, получение разрешений, поддержание и управление соединениями.
При подключении он будет проходить рукопожатие TCP, затем аутентифицироваться, а затем мы введем имя пользователя и пароль.
После проверки все в порядке, мы подключены к службе MySQL, но в это время мы находимся в состоянии ожидания.
Как проверить список незанятых соединений?
show processlist, следующий рисунок является результатом выполнения команды в моей собственной таблице базы данных, где столбец Command отображается какSleepЭта строка означает, что сейчас в системе есть незанятое соединение.
Здесь следует отметить, что если клиент нашей базы данных не отвечает слишком долго, коннектор будет автоматически отключен, этот параметр времени равенwait_timeoutКонтролируется, продолжительность по умолчанию составляет 8 часов.
При повторном подключении после отключения будет сообщено об ошибке.Если вы хотите продолжить операцию, вам необходимо переподключиться.
Вот пример из книги, которую я читал:
Друг в правительстве сказал, что у них очень странная система, и им приходится каждое утро перезапускать приложение, иначе пишет, что соединение с базой данных не удалось, и они не знают, что делать.
Я проанализировал, что, согласно этой подсказке об ошибке, должно быть, что время соединения слишком велико, и соединение отключено. Время ожидания базы данных по умолчанию составляет 8 часов, и вы обычно уходите с работы в 6:00.После работы никто не использует систему.Вы не пойдете на работу до 9:00 или даже 10:00 следующего дня. утро.Время между ними превысило 10 часов.База данных Соединение обязательно будет разорвано.
Да, превышено время ожидания, и человек, который писал код, не заметил этой детали, поэтому возникает эта проблема.
Измените таймаут немного больше, и проблема решена.
На самом деле, у нас не всегда может быть доступ к такого рода параметрам, но когда мы действительно сталкиваемся с проблемой, знание приблизительного использования каждого параметра не сделает вас безголовой мухой.
Есть ли какие-то другие способы, кроме перелинковки? Потому что создание ссылок все еще более хлопотно.
Используйте длинные соединения.
Но здесь есть недостаток: после использования длинного соединения память будет очень быстро парить, мы знаем, что память, временно используемая MySQL во время выполнения, управляется в объекте соединения.
Отпустить его можно только при отключении линка.Если постоянно используется длинное соединение, то это приведет к OOM (Out Of Memory), что приведет к перезапуску MySQL, что приведет к частому Full GC в JVM.
Итак, как вы будете решать эту проблему?
Я обычно регулярно отключаю длинное соединение.После его использования в течение определенного периода времени или после того, как программа решит, что запрос, занимающий много памяти, был выполнен, соединение будет разорвано, и можно будет снова подключиться, когда нужный.
Есть ли другой способ? Ты не чувствуешь себя элегантным, братишка.
После выполнения относительно большого запроса выполнитеmysql_reset_connectionРесурсы подключения можно повторно инициализировать. Этот процесс лучше, чем описанный выше, он не требует переподключения, но он инициализирует состояние подключения.
Вы понимаете кэш запросов MySQL?
После того, как MySQL получит запрос на запрос, он сначала обратится к кэшу запросов, чтобы узнать, выполнялся ли этот оператор раньше.
Вам любопытно, что один и тот же оператор выполняется в MySQL дважды, первый и более поздний раз разные, последний, очевидно, быстрее, это из-за наличия кеша.
Как и в Redis, пока это оператор, который вы выполняли ранее, он будет храниться в памяти в виде ключ-значение.
При запросе сначала будет выполняться запрос к кешу. Если он может попасть, он вернет кешированное значение. Если он не сработает, он выполнит следующий этап.
Но я все равно не люблю использовать кэширование, потому что кэширование приносит больше вреда, чем пользы.
Ой? как мне это сказать?
Сделать кеш недействительным очень просто. Пока в таблице есть какое-либо обновление, все кеши запросов этой таблицы будут полностью очищены, а кеш будет очищен непосредственно перед его использованием, или много кешей будет накапливаться для использования.Но обновление отбросило его обратно.
Это приводит к ужасной низкой частоте запросов, для кеширования подходит только та таблица, которая только запрашивается, а не обновляется, но такая таблица часто редко существует, обычно это таблица конфигурации или тому подобное.
Итак, как мы обычно работаем, когда не хотим использовать кеш при запросе, или как мы работаем с кешем?
может отображать вызов, положитьquery_cache_typeУстановите его в ТРЕБОВАНИЕ, чтобы SQL не применялся к кешу по умолчанию, и если вы хотите использовать кеш, используйте SQL_CACHE.
Небольшая хитрость заключается в том, что когда мы разрабатывали раньше, мы шли в библиотеку, чтобы увидеть время выполнения sql, но оно может быть закешировано.В общем, мы можем использовать SQL_NO_CACHE перед sql, чтобы узнать реальное время запроса.
select SQL_NO_CACHE * from B
Кэшируется после MySQL 8.0ОтменаТак что всем не стоит сейчас особо заострять внимание на этом вопросе, в основном из-за того, что версия, которой я пользовался до этого, была невысокой, поэтому кеш всегда был.Все об этом тоже упоминали.
Что мне делать после завершения запроса кэша?
В случае отсутствия попадания в кеш оператор начинает выполняться.Если написанный вами оператор имеет синтаксические ошибки, это следующий момент, который больше беспокоит MySQL.
Так что же он будет делать? сделаю первымлексический анализ, В вашем утверждении так много слов и пробелов, что MySQL должен определить, что представляет собой каждая строка, будь то ключевое слово, имя таблицы, имя столбца и т. д.
затем начнитеРазбор, по результату лексического анализа грамматический анализ будет судить о правильности или неправильности вашего sql, если он неправ, он напомнит вам, и напомнит вам, где это неправильно.
После правильного анализа переходите к следующему шагу.оптимизатор.
В чем основная оптимизация?
Оптимизация относительно проста, потому что мы можем создать много индексов при построении таблицы.Одним из шагов оптимизации является подтверждение того, какой индекс использовать, например, используя индекс первичного ключа, объединенный индекс или какой индекс лучше.
Так же есть оптимизация порядка выполнения.Условий очень много.Какую таблицу сначала проверить или связать первой, будет много схем, и в итоге оптимизатор решает какую схему выбрать.
Наконец, оно выполняется, и исполнение передается исполнителю.
Первым шагом может быть оценка разрешений.На самом деле, один из моментов, в котором я не уверен, заключается в том, что многие компании, с которыми я связываюсь, представляют собой системы онлайн-запросов собственной разработки.Мы не можем использовать Navicat для прямого подключения к онлайн-библиотеке. , но для работы перейдите на веб-страницу. , Разрешения для таблицы выполняются на уровне MySQL или в системе. Я думаю, это должно быть сделано на системном уровне. MySQL может быть полностью открыт по умолчанию, но мы этого не делаем. не знаю айпи.
Друзья, которые знают об этом, также могут добавить меня в WeChat и рассказать об этом в публичном аккаунте [Три принца Ао Бинга].
При выполнении оценивайте, выполняются ли условия построчно. Может быть, лучше выполнять с индексом. Судить построчно, как будто интерфейс определен заранее в движке, поэтому он быстрее.
Медленный журнал базы данных имеетrows_examinedполей, сколько строк сканировать, чтобы увидеть, иexplainТакже смотрите план выполнения, сколько строк мы просканировали.
Вы можете, парень, базовая структура все еще очень ясна, в следующий раз мы рассмотрим более подробно индекс и некоторые механизмы.
Хорошо, увидимся в следующий раз.
Релевантная информация
Совет: изначально в этой колонке было много информации, подготовленной мной, но все они являются внешними ссылками или неуместными методами обмена.Оператор блога напомнил мне, поэтому все перешли на официальный аккаунт, чтобы ответить [материал】Хорошо.
Суммировать
В принципе, я вкратце рассказал о логической архитектуре MySQL. Конечно, если вы разберетесь в ней уверенно, то обнаружите, что деталей в ней на самом деле много. Я лишь упомянул некоторые распространенные проблемы. Это еще АлиДинчИдея старшего "MySQL боя".
Мое собственное знание MySQL скорее теоретическое, и до глубокого понимания пока не доходит, если есть возможность, то надо изучить его углубленно.
болтовня
Это должна быть моя первая техническая статья в начале года.Я изначально немного писал об индексации несколько лет назад, но я вспомнил об этом позже, когда думал об этом.Лучше ознакомиться с базовыми знаниями по базе данных, а затем узнайте об индексной точке.
В новом году я могу попробовать какие-то новые стили написания, не обязательно все методы интервью, конечно, это стиль интервью, потому что новый стиль еще не определен. Я также постараюсь запустить несколько серий в виде видеозаписи после апреля.Если у вас есть какие-либо комментарии, вы также можете сообщить мне в WeChat.
В дальнейшем тоже буду ставить в конец, чтобы у всех было лучшее впечатление от чтения.В любом случае, если у вас есть какие-либо отзывы, я расположу их по порядку.
Все должны одеться недавно, чтобы не простудиться.Эгг пошел к врачу и чуть не испугался пописать.Покажем вам его оборудование:
Я Ао Бин, мастер по инструментам, который живет в Интернете.
Это не легко создать, я не хочу быть проституткой, твой«Три ссылки»Это самая большая движущая сила для создания Bing Bing, увидимся в следующий раз!
Статья постоянно обновляется, вы можете искать в WeChat "Третий принц Ао Бин"Прочтите это в первый раз, ответьте [материал】【интервью】【резюме] Подготовленные мной материалы интервью и шаблоны резюме крупных заводов первой линии, эта статьяGitHub github.com/JavaFamilyОн был включен, и есть полные тестовые сайты для интервью с крупными заводами.Добро пожаловать в Star.
Чем больше вы знаете, тем больше вы не знаете