Отношения в семье

Отношения на ранних этапах всегда полны эйфории, поэтому развиваются они, как правило, легко и слаженно. Однако с годами страсть и увлеченность гаснет, что приводит к отдалению партнеров друг от друга. От так называемого кризисного периода не застрахован никто, но очень важно понимать, что выход есть и прежний «огонь» еще можно вернуть. Существуют простые способы снова сблизиться с любимым человеком и наладить отношения. Сделав несколько несложных шагов навстречу друг к другу, можно заново узнать свою половинку и ощутить к ней былую трогательность.

Шаг первый — общение. Мы не всегда задумываемся о том, что самое важное в отношениях — это разговоры. Они крайне необходимы двум любящим людям, на каком бы этапе отношений они не находились.
Начать можно с банального вечернего обмена настроением и впечатлениями, пережитыми за день. Какими бы уставшими после работы оба не были — найти силы поинтересоваться маленькой будничной жизнью половинки крайне необходимо. Тем более, что разговоры друг о друге можно перенести в более комфортную обстановку: например, устроить общение перед сном в постели, отложив и выключив все гаджеты.
Любой способ коммуникации, позволяющий заново узнавать друг друга, даст начало возрождению эмоциональной связи между людьми, что отдалились. А появление эмоционального контакта всегда влечет за собой физическое притяжение.

Шаг второй — тактильный контакт. Одно из проявлений любви — это желание касаться. Поэтому так важно не забывать о прикосновениях в любых их проявлениях. Стоит завести полезные привычки в этом ключе: чаще держаться за руки, встречать и провожать друг друга поцелуями, обниматься перед сном. Ведь даже учеными доказано, что мужчины, целующие своих жен перед работой — намного успешнее тех, кто этого не делает.

Такое проявление внимания друг другу будет постепенно пробуждать былую нежность и трогательность. И если на начальных этапах эти действия будут осознанными, то в дальнейшем регулярные касания станут неотъемлемой частью отношений на уровне автоматизма.

Шаг третий — общие занятия. С годами интересы и цели двух людей в отношениях меняются. Иногда они становятся кардинально разными, из—за чего и наступает разлом между половинками. И даже если эмоциональная и физическая связь пришли в норму, нужны постоянные точки соприкосновения. Для этого нужны общие интересы и занятия.

Необходимо вспомнить старые общие хобби или любимые занятия, что ранее увлекали обоих. Если таковых не осталось — это не причина отчаиваться, а, наоборот, повод отыскать новые способы времяпровождения вместе. Стоит вспомнить, что давно хотелось реализовать, но по каким-либо причинам всегда откладывалось. Например, путешествие в конкретную страну, совместное занятие спортом или даже банальный поход в кино. Любое увлечение, которое не только позволит проводить досуг вдвоем, но еще и обеспечит смену обстановки и «картинок», положительно скажется на взаимоотношениях влюбленных.

Отыскав общее хобби, его нужно ввести в жизнь пары на постоянной основе. Это позволит быть счастливыми в отношениях при любых обстоятельствах, даже если у двух любящих людей разные ритмы жизни.

Шаг четвертый — исключение любой недосказанности. Чтобы закрепить предыдущие пройденные шаги и не допустить очередного кризиса в отношениях, необходимо ввести еще одно важное правило — говорить друг другу все. Особенно это касается конструктивной критики и высказывание друг другу негативных аспектов в привычной жизни.

Такой подход позволит не накапливать обиды, а выдавать их дозировано. Если сразу договориться друг с другом, чтобы делиться любой мелочью, которая создала дискомфорт и неприятные ощущения, то в дальнейшем этих самых мелочей станет меньше, а негатив от них не будет копиться. Ведь иногда ничего не означающее действие для одного человека является неприемлемым для другого. И первый, не подозревая об этом, потом недоумевает, что происходит со вторым. Исключение недосказанности внесет ясность в отношения и позволит посмотреть на них с другой стороны, узнать больше о предпочтениях любимого человека.

Каждая пара индивидуальна, поэтому трудно найти универсальный способ вернуть близость в отношениях. Главное — делать шаги друг к другу и стремиться вместе сохранить любовь со всей ее страстью и нежностью.

Быстрые кнопки Youtube

Управление воспроизведением

Пробел или k: пауза / воспроизведение
>: увеличить скорость воспроизведения
<: уменьшить скорость воспроизведения

f (fullscreen): перейти в полноэкранный режим и обратно (выйти из полноэкранного режима можно также с помощью клавиши Esc)

Перемотка видео

— перемотать назад на 5 секунд
— перемотать вперёд на 5 секунд
Ctrl + ← или j — перемотать назад на 10 секунд
Ctrl + → или l — перемотать вперёд на 10 секунд

0 или Home — перемотать видео на начало
1 — перемотать на позицию 10% общего времени видео

9 — перемотать на позицию 90% общего времени видео
End — перемотать видео в конец

Управление громкостью

— увеличить громкость на 5%
— уменьшить громкость на 5%
m (mute) — выключить/включить звук

Навигация по плейлисту

N (Next) — перейти к следующему видео в плейлисте
P (Previous) — перейти к предыдущему видео в плейлисте

Другие функции

/ — переместить курсор в поле поиска (работает даже в полноэкранном режиме)
Esc — покинуть поле поиска / выйти из полноэкранного режима
? — отобразить/скрыть помощь по горячим клавишам (скрыть можно так же по Esc)

Очистка кеша 1С

Кеш 1С

Кеширивание — процесс создания буфера часто используемой и, как правило, статичной информации.  Кеширование используется для ускорения работы программы, в частности, в 1С на компьютер пользователя подгружаются файлы конфигурации, чтобы не запрашивать их с сервера при каждом обращении.

Однако очень часто платформа 1С неправильно отрабатывает кеширование конфигурации, и в результате мы получаем неадекватное поведение конфигурации.

Причины некорректного поведения могут быть разные: динамическое обновление конфигурации, программные или аппаратные сбои.

Первый способ — почистить кэша 1С вручную

Для решения проблем и «глюков» 1С обычно помогает очистка кеша платформы 1C 8.3.

Делается это следующим образом:

шаг 1

Найти каталог, где хранятся временные файлы 1С, их можно увидеть в меню настройки в списке ИБ:

Очистка кеша

2 шаг

Мы получили адрес вроде

Папки с кэшем расположены по адресу

*где username — имя пользователя системы, а папка 1Cv82 может отличаться в зависимости от версии платформы 1С

Зайдя туда, мы находим множество (количество папок равно количеству конфигураций) интересных папок:

Очистка кеша 1С

Все выделенные каталоги являются кешем БД 1С, их можно смело удалять. Перед удалением обязательно необходимо выйти из ИБ.

Если Вам не хочется искать, где расположены файлы, Вы можете воспользоваться специальной программой (бат-файл), которая очищает папки с временными файлами — скачать ОчисткаКеша.bat. Не забывайте, что Вы пользуетесь ими на свой страх и риск. Они содержат следующую команду:

Второй способ очистки временных файлов 1С — удаление базы из списка

Второй способ более простой, однако он не совсем правильный. Для очистки достаточно удалить эту конфигурацию и создать новую с тем же путем к ИБ.

Вследствие этого старая папка с кэшем «отвяжется» от этой ИБ, и создастся новый каталог.

Можно делать и так, кеш очищается, однако временные файлы так и остаются на жестком диске.

Третий способ — параметр ClearCache

Рекомендую использовать, если глюки из-за наличия временных файлов появляются постоянно. Однако данный способ снижает производительность системы. Подходит только для тонкого клиента.

Необходимо в дополнительных параметрах запуска (в списке баз кнопка Изменить, последняя закладка) прописать команду /ClearCache. Пример использования:

Очистка кеша

 

Источник: http://programmist1s.ru/kak-pochistit-kesh-v-1s/

 

Скриншот с помощью Python

Как делать скриншоты в python используя модуль pyautogui

Подключаем модуль pyautogui:

Чтобы сделать скриншот, достаточно воспользоваться методом screenshot(), который предоставляет нам данный модуль:

Если Вам нужно сделать скриншот определенной части экрана, можно воспользоваться свойством region:

 

 

 

MD5 сумма файлов командами Windows из командной строки

Если у вас возникла задача узнать хеш-сумму файла, а устанавливать какие-либо дополнительные программы для этого не хочется, то это можно сделать стандартными средствами с помощью командной строки.

Нам поможет утилита CertUtil по умолчанию входящая в комплект Windows

Чтобы узнать хеш сумму файла необходимо зайти в командную строку: (клавиши Win+R и набираем cmd, либо «Пуск-Все программы-Стандартные-Командная строка«)

и выполнить команду

где, c:file — путь до файла

По умолчанию утилита считает хеш-сумму с помощью SHA1

Если хотите использовать другой, пожалуйста, доступны MD5 MD4 MD2 SHA512 SHA384 SHA256 SHA1

Например:

Также можно воспользоваться утилитой FCIV (File Checksum Integrity Verifier utility) эта утилита может не входить по умолчанию в систему. Скачать можно ее с оф.сайта http://support.microsoft.com/ru-ru/kb/841290

Распаковываем и кладем файл fciv.exe для удобства в папку C:windowssystem32

Теперь можно выполнив команду

узнать хеш-сумму файла, по умолчанию MD5, но также доступен SHA1

Из полезных функций хочется отметить возможность проверить автоматом хеш-суммы всех файлов в папке, а также загрузить их в XML-файл для последующей сверки

Считаем хеш-сумму всех файлов в папке

Создаем файл d:hashes.xml, который содержит хеши и пути до файлов всех файлов папки d:Folder

Сверяем хеш суммы файлов по ранее созданному xml файлу

 

Источник: http://itfound.ru/123-uznat-hash-sum-standart-sredstva-cmd.html

Скачиваем сайты целиком — утилита wget

wget — это утилита, которая предназначена для загрузки файлов по сети (из интернета). Я расскажу, как использовать wget, чтобы скачивать сайты из интернета целиком и затем просматривать их в автономном режиме.

С помощью wget можно скачивать сайты, включая картинки, всего лишь указав адрес сайта и определенные параметры. wget будет автоматически переходить по ссылкам на сайте и скачивать страницу за страницей. Рассмотрим несколько примеров от простых к более сложным использования wget для скачивания сайтов.

Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:

После выполнения данной команды в директорию site.com будет загружена локальная копия сайта http://site.com. Чтобы открыть главную страницу сайта нужно открыть файл index.html.

Рассмотрим используемые параметры:

-r указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
-k используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
-p указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
-l определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
-E добавлять к загруженным файлам расширение .html.
-nc при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.

 

Мы рассмотрели лишь одно из возможных применений утилиты wget. На самом деле область применения wget значительно шире и wget обладает большим числом дополнительных параметров. За более подробной информацией обращайтесь к руководству, выполнив в командной строке: man wget.

 

 

 

Касино (исп. Casino)

Касино (исп. Casino) это социальный кубинский городской салонный парный танец популярного и традиционного характера
Содержание

Основы

Танец Касино является стилем кубинского танца Сон.
Танец Касино появился приблизительно в 1956 году в Казино Депортиво (Casino Deportivo), (до революции это район проживания богатой европейской буржуазии). В данном заведении танцевали танцы Руэда де Сон и Руэда де Ча-ча-ча. Некоторые пары отделялись от общего танца Руэды и танцевали отдельно. От названия Casino Deportivo танец взял своё название — Casino.

Именно круговой танец Руэда де Касино определяет общую хореографию танца Касино.

Принципы Касино: а) эргономичность движений; б) удобство и комфортность движений основано на естественной биомеханике движения человека; в) как результат этого: красота и плавность движений.

Базовое перемещение в Касино основано на механике ходьбы

Касино исполняется преимущественно парой, но в процессе танца партнеры могут расходиться в свободное танцевание, которое называется Floreo.
Танцуя соло, партнеры используют шаги, движения рук и корпуса, комбинированные в спонтанной и красивой манере как украшение танца, возможны заимствования из других танцев, таких как Сон, Ча-ча-ча, Пачанга, Румба.

Такие вставки свободного танцевания не нарушают структуру танца и не превышают 2-3 музыкальных восьмёрок, примером может служить фигура под названием Vacilala con engaño.

В Касино после оптимизации движений, которая произошла в 80-х годах прошлого века, исчезли шаги назад. В современном Касино шаги у партнёра и партнёрши направлены вперёд, что оказывает важное влияние на динамику танца в целом
.
Касино — это салонный танец, созданный на Кубе её буржуазией, в котором сочетаются элементы танцев, которые предшествовали ему в процессе эволюции. Возник как танцевальный жанр, который не имеет автора среди городских популярных танцев.

Касино не соответствует ни одному музыкальному жанру или смеси музыкальных жанров. Это танец для развлечения в коллективной и индивидуальной форме и не он не соответствует никакому религиозному мифу, и никак не связан с религиозными танцами. Касино возник в 50-х годах прошлого века в салонах Гаваны как форма развлечения в паре, которая танцуется взявшись за руки, несмотря на всю свободу танца.

Касино очень часто не верно называют Сальсой, но между этими культурными явлениями около 15 лет разницы. Касино появился в 1956, а Сальса как коммерческое название кубинской музыки возникла в 1969 году, этот факт с очевидностью показывает, что это разные культурные феномены. Касино — это не Сальса, утверждают кубинцы.

История возникновения
Из книги: «Касино это не Сальса»
Автор: Александр Павлов. Книга: «Касино это не Сальса», стр.35

Касино по своей исторической линии происходит от танцев, которые исполняли на балах, а именно Контрданса и Данса Хабанера, на этих танцах присутствовал Bastonero — человек, который называл определённые фигуры (а их было до 900), которые и исполняли танцующие. Именно подобную картину мы наблюдаем в Руэда де Касино, где Cantor, который ведёт Руэду, так же называет фигуры, исполняемые всеми участниками Руэды[4]. Благодаря этому в салонном танце Касино разработана подробная номенклатура фигур, которую обычно не встретишь в уличных танцах. Таким образом становится очевидна связь Касино с салонными или бальными танцами 18-19 века, которые танцевала кубинская аристократия.

В схеме развития и эволюции кубинского стиля Касино вы можете увидеть влияние Вальса, именно от Вальса в салонные кубинские танцы пришла закрытая позиция исп. Posición Cerrada (Frontal).

Касино возникло в Казино для отдыха, которые находились в прибрежной зоне Гаваны. Мы знаем, что революция на Кубе произошла в 1959, но Касино возникло раньше, где-то с начала 50-х и сформировалось к 56-году[5]. До революции на Кубе процветал настоящий расизм, были зоны для белых, для мулатов и для негров. Престижное Casino Deportivo находилось в зоне для богатого «белого» населения, куда вход темнокожим был запрещён. В Casino Deportivo существовала клубно-карточная система. До сих пор сохранились карточки того периода, их можно увидеть в различных исторических исследованиях. Один из первых прославившихся исполнителей Касино, а также один из основателей конкурса «Para Bailar» танцор Розендо.

После кубинской революции мощным двигателем для развития касино становится телевидение. Несмотря на запреты со стороны правительства население получало доступ к иностранной музыке и видео трансляциям танцевальных передач. Таким образом, другие танцевальные направления проникают на остров и обогащают танец касино. Такими направлениями являются: rock’n’roll, hip-hop, диско и тд.
Позиции танцоров в паре
Позиции партнеров в танце Касино на 8 счет. Красным цветом обозначено расположение ступней партнерши. Синим цветом обозначено расположение ступней партнера.

В танце Касино существует три основные позиции партнёров в паре

Закрытая позиция — (исп. Posición Cerrada (Frontal))
Боковая позиция Каида — (исп. Posición de Caida (Lateral))
Открытая косая позиция — (исп. Posición Abierta)

Основные базовые фигуры
Энтрада — начинается и заканчивается в закрытой позиции

Базовый шаг Энтрада (исп. Entrada ) — начинается и заканчивается в закрытой позиции (исп. Posición Cerrada (Frontal))

Пара ти пара ми (исп. Para ti para mi) — начинается и заканчивается в открытой позиции (исп. Posición Abierta)

Пара ти пара ми (исп. Para ti para mi ) — начинается и заканчивается в открытой позиции (исп. Posición Abierta)

Энчуфэ (исп. Enchufe) — начинается из открытой косой позиции (исп. Posición Abierta) или из позиции Каида (исп. Posición de Caida (Lateral)) и по окончанию партнеры приходят в эти же позиции

Диле ке но (исп. Dile que no) — начинается с позиции Каида (исп. Posición de Caida (Lateral)) и заканчивается в открытой позиции (исп. Posición Abierta)

Басилала (исп. Vacilala) — начинается с открытой позиции (исп. Posición Abierta) и заканчивается в позиции Каида — (исп. Posición de Caida (Lateral))

Седасо (исп. Cedazo) — начинается из закрытой позиции (исп. Posición Cerrada (Frontal)) или открытой косой позиции (исп. Posición Abierta) и заканчивается в этих же позициях

Пасео (исп. (Paseo)) — начинается и заканчивается в открытой позиции (исп. Posición Abierta)

Салонео (исп. Saloneo) — начинается и заканчивается в позиции Каида (исп. Posición de Caida (Lateral))

Родео (исп. Rodeo) — начинается и заканчивается в позиции Каида(исп. Posición de Caida (Lateral))

Эксибела инверса ((исп. Exibela inversa) — начинается и заканчивается в позиции Каида (исп. Posición de Caida (Lateral))

Эл медио (исп. El medio) — начинается в открытой позиции (исп. Posición Abierta) и заканчивается в позиции Каида (исп. Posición de Caida (Lateral))

Ботейа ((исп. Botella) — начинается с позиции Каида (исп. Posición de Caida (Lateral)) и заканчивается в открытой позиции (исп. Posición Abierta)

Другие фигуры происходят из комбинации базовых фигур. Например, Сетента (исп. Setenta) — состоит из двух базовых фигур: Эчо и Энчуфэ.
Типы ведения в касино

Ведение весом
Ведение по типу «Веди и держи ось»
Ведение, одной рукой или двумя руками, с движением направленным против веса.

Касино и музыка

В Касино как и в любом танце существует базовое перемещение, которое состоит из 6 шагов. 6 шагов это целое танцевальное предложение. Танцевальное предложение должно укладываться в музыкальное предложение, которое в свою очередь состоит из 8 музыкальных долей. Музыкальное предложение состоит из двух тактов в музыкальном размере 4/4 и эти музыкальные такты объединяются вместе ритмом Клаве. Есть два ритмически верных способа танцевать Касино:

A tiempo — первый шаг начинается на первую долю (1.2.3 — шаги 4 — пауза, 5.6.7 — шаги 8 — пауза)

A contratiempo — первый шаг начинается на вторую долю. (2.3.4 — шаги 5 — пауза, 6.7.8 — шаги 1 — пауза) — в любом случае — танцевальное предложение не выходит за пределы музыкального предложения. При данном способе танца основной акцент делают на четвертую и восьмую доли.

Касино это танцевальный жанр, который не связан жёстко с определённым музыкальным жанром. Касино исторически танцевали под музыку Сона, так же оно танцуется под такие музыкальные жанры как Чангуи, Гуарача, Чаранга, Сальсатон, Сонго, Тимба, Тимбатон.

Сокращение журнала регистрации 1С: 8.3

Работа с журналом регистрации в 1С: 8.3 изменилась по сравнению с 8.2. Рассмотрим варианты автоматического и ручного обрезания журнала регистрации.

Проблема:  На сервере растут логи баз на платформе 8.3.

Необходимо: Часть логов, например, за месяц, оставить доступными напрямую из базы, остальные обрезать и хранить на других дисках. Делать это необходимо автоматически.

Как было раньше(8.1 и 8.2): В конфигураторе можно было указать настройку: «Разделять хранение журнала по периодам» и указать период, например, Неделя. Таким образом, каждая неделя логов хранилась в отдельном файле. Батником копировались и архивировались старые логии на отдельный диск, чтобы они не занимали место на сервере. При необходимости посмотреть «древний» лог, мы возвращали файл за требуемый период на место и просматривали его стандартными средствами 1С.

Как нынче в 8.3: Журнал регистрации хранится в файле 1Cv8.lgd – это файл базы данных sqlite. Настройка «Разделять хранение журнала по периодам» в конфигураторе отсутствует. Осталась кнопка «Сократить», с помощью которой обрезается часть журнала и переносится в указанный файл. Однако после этого размер логов не уменьшается. Что нужно сделать, чтобы размер файла уменьшился, напишу чуть ниже.

Напомню, что все должно работать автоматически. Конфигурация типовая, поэтому трогать ее не будем.

Что было сделано: В планировщике заданий добавил задание, которое выполняет cmd-файл, который запускает 1С с параметрами. В параметре «/Execute», указан путь до обработки, которая копирует часть журнала регистрации в файл, затем эту часть обрезает.

В обработке воспользовался процедурами по работе с журналом регистрации:

Обработку запускаю cmd-файлом:

В параметре «/С» передается период деления журнала регистрации (День / Неделя / Месяц / Год) и путь до места, где будут храниться обрезанные логи.

После сокращения журнала регистрации размер файла журнала регистрации не изменяется. Чтобы он изменился, необходимо остановить агент сервера и выполнить команду vacuum. Затем запустить службу агента сервера. В планировщике заданий добавил задание, которое выполняет следующий cmd-файл:

Утилиту  sqlite3.exe можно скачать с официального сайта http://www.sqlite.org/

Для того чтобы в cmd-файле можно было использовать кириллицу, сохраняю его через «Notepad++» в кодировке ОЕМ866.

Что получили: Логи хранятся за каждую неделю в отдельных файлах. Размер файла 1Cv8.lgd не увеличивается.

Обрезанную часть логов, перенесенную в отдельный файл, можно просмотреть штатными средствами 1С: Все функции->Стандартные->Журнал регистрации->Еще->Просмотреть из файла.

Для того чтобы, при необходимости была возможность восстановить обрезанные данные написал небольшую внешнюю обработку, в которую так же добавил весь функционал описанный выше.

 

Источник: http://1c83.ru/public/510970/

 

Оптимизация SQL запросов для ускорения сайтов (MySQL)

От автора: вы знаете, что быстрый сайт == счастливые пользователи, выше рейтинг в google и повышенная конверсия. Возможно, вы думаете, что ваш сайт на WordPress максимально быстрый: вы смотрите за производительностью по статьям «лучшие практики настройки сервера», «решение проблем с медленным кодом» и «перемещение изображений на CDN». Но все ли это?

В динамических сайтах типа WordPress с базой данных у вас будет одна и та же проблема – запросы к базе данных замедляют сайт. В этой статье я покажу вам, как делается оптимизация SQL запросов, вызывающих замедления, и как понять, в чем проблема в этих запросах. Я буду использовать реальный запрос, который мы недавно правили, так как он замедлял портал покупателя deliciousbrains.com.

Определение

Первый шаг в решении медленных SQL запросов – найти их. Ashley восхваляла плагин отладки Query Monitor в блоге. Бесценным этот инструмент делает функция плагина запросов к базе данных для определения медленных SQL запросов. Вы можете фильтровать запросы по коду или компоненту (плагин, тема или ядро WordPress), которые их совершают. А также плагин умеет выделять повторяющиеся и медленные запросы:

Если не хотите ставить плагин отладки на продакшн сайт (может, вас волнует производительность), можете запустить MySQL Slow Query Log, который логирует все запросы, занимающие определенное время на выполнение. Инструмент очень легко настроить и указать папку для логирования запросов. Так как это серверное решение, то удар на производительность будет меньше, чем плагин отладки. Однако когда он не нужен, его нужно отключить.

Понятие

После нахождения медленных запросов далее необходимо попытаться понять, что их замедляет. Недавно при разработке нашего сайта мы нашли запрос, который выполнялся 8 секунд!

Для запуска магазина плагинов мы использовали WooCommerce и плагин WooCommerce Software Subscriptions. Суть запроса – получение всех подписок покупателя по его номеру. В WooCommerce довольно сложная модель данных. Хотя заказ и хранится в виде кастомного типа поста, но id покупателя не хранится в post_author, а является частью post мета данных. Также есть несколько подключений к пользовательским таблицам, созданным плагином подписки на ПО. Давайте более подробно разберем запрос.

MySQL твой друг

В MySQL есть полезное выражение DESCRIBE, с помощью которого можно выводить информацию о структуре таблицы (ее колонки, типы данных, значения по умолчанию). Если выполнить DESCRIBE wp_postmeta;, то вы увидите:

Круто, но вы, возможно, уже знаете об этом. Но знали ли вы, что префикс DESCRIBE можно использовать на SELECT, INSERT, UPDATE, REPLACE и DELETE? Более широко известен синоним EXPLAIN, который даст нам подробную информацию о том, как будет выполняться выражение.

Результат для медленного запроса:

На первый взгляд разобраться сложно. К счастью, ребята с SitePoint собрали полное руководство к пониманию выражения.

Самая главная колонка type, в ней описывается способ объединения таблиц. Если стоит ALL, значит MySQL читает всю таблицу с диска, увеличивает скорость чтения/записи и перекладывает загрузку на CPU. Процесс называется полное сканирование таблицы (более подробно позже).

Колонка rows также указывает на то, что MySQL должен делать. Она показывает, сколько строк необходимо просмотреть для нахождения результата.

Explain дает больше информации, чем мы можем оптимизировать. Например, таблица pm2 (wp_postmeta) говорит нам, что мы используем Using filesort, так как хотим, чтобы результаты хранились с помощью выражения ORDER BY. Если бы мы еще группировали запрос, это добавило бы еще больше нагрузки на выполнение.

Визуальное расследование

MySQL Workbench – еще один хороший бесплатный инструмент для расследований. Для баз данных MySQL 5.6 и выше результат EXPLAIN можно вывести в виде JSON, а MySQL Workbench превращает этот JSON в визуальный план выполнения выражения:

Он автоматически рисует предупреждения по проблемам, окрашивая части запроса, которые будут долго выполняться. Мы сразу видим, что присоединение к таблице wp_woocommerce_software_licences (алиас |) добавляет проблем.

Решение

Часть запроса выполняет полное сканирование таблицы, чего следует избегать, так как она использует колонку без индекса order_id для объединения между таблицами wp_woocommerce_software_licences и wp_posts. Распространенная проблема в медленных запросах. Ее очень легко решить.

Индексы

Order_id – довольно важная часть определения данных в базе данных, и если мы будем строить запрос таким образом, то нам понадобится добавить индекс в эту колонку, или MySQL будет буквально сканировать все строки таблицы, пока не найдет необходимые. Добавим индекс и посмотрим, что он даст:

Нам удалось сэкономить 5 секунд запроса простым добавлением индекса, круто!

Знайте свой запрос

Проанализируйте запрос – join за join, подзапрос за подзапросом. Запрос делает то, что не должен? Его можно оптимизировать?

В нашем случае мы подключаем таблицу лицензий к таблице постов с помощью order_id, постоянно ограничивая выражение типами постов shop_order. Это необходимо для обеспечения целостности данных, чтобы убедиться, что мы используем только правильные записи заказов. На самом деле эта часть запроса устарела. Мы знаем, что безопаснее, чтобы в строке лицензии ПО в таблице был order_id, относящийся к заказу WooCommerce в таблице постов, поскольку это применяется в коде плагина PHP. Давайте удалим join и посмотрим, улучшит ли это запрос:

Несильно, но запрос теперь выполняется меньше 3 секунд.

Кэшируйте все!

Если на вашем сервере нет MySQL кэширования запросов по умолчанию, то лучше его включить. Так MySQL будет сохранять запись всех выполненных выражений с результатами, если выражение будет выполнено снова, вернется кэшированный результат. Кэш не устаревает, так как MySQL сбрасывает кэш при изменении таблицы.

Query Monitor выяснил, что наш запрос запускается 4 раза за одну загрузку страницы. Хотя и хорошо кэшировать MySQL запросы, но дублировать считывания из базы данных в одном запросе точно не стоит. Статическое кэширование в коде PHP – простой и крайне эффективный способ решения проблемы. Вы получаете результат запроса из базы данных при первом запросе и храните результат в статическом свойстве класса. В последующих вызовах будет возвращаться результат из статического свойства:

Кэш имеет время жизни запроса, более точно – время жизни объекта. Если вы ищите постоянные результаты запроса в других запросах, вам нужно реализовать постоянный Object Cache. Ваш код должен уметь включать кэш и устаревать кэш при изменении даты.

Мыслите нестандартно

Можно предпринять и другие способы для ускорения выполнения запросов, в которых нужно чуть больше, чем просто поправить запрос или добавить индекс. Одна из самых медленных частей нашего запроса – процесс объединения таблиц для перехода от id покупателя к id товара, и это необходимо делать для каждого покупателя. А что если сделать все объединения за раз, чтобы получать данные о покупателе тогда, когда это необходимо?

Вы можете денормализовать данные, создав таблицы, в которой хранятся данные лицензии, а также id пользователя и товара для всех лицензий, а также запрос к конкретному покупателю. Понадобится пересобрать таблицу с помощью MySQL triggers на INSERT/UPDATE/DELETE для таблицы лицензий (или других в зависимости от изменения данных), но это значительно повысит производительность запроса данных.

Если несколько join замедляют запрос, можно ускорить его, разбив на 2 и более выражения, после чего выполнять их отдельно в PHP, собирать и фильтровать результаты в коде. Laravel делает что-то похожее в жадной загрузке в Eloquent.

WordPress может замедлять запросы к таблице wp_posts, если объем данных большой, и присутствует множество кастомных типов постов. Если запросы типов постов замедляют сайт, попробуйте уйти от модели хранения кастомных типов постов в сторону кастомной таблицы.

Результаты

С помощью этих подходов по оптимизации запросов нам удалось ускорить наш запрос с 8 до 2 секунд, а также снизить количество вызовов с 4 до 1. Время запросов записывалось на версии для разработки, в продакшн оно было бы меньше.

Надеюсь, это руководство по ускорению медленных запросов помогло вам. Оптимизация запросов может показаться сложной, но как только вы попробуете, и у вас что-то получится, вы захотите еще сильнее улучшить запрос.

Автор: Iain Poulson

Источник: https://www.tutorialspoint.com/

Редакция: Команда webformyself.

Источник: https://webformyself.com/optimizaciya-sql-zaprosov-dlya-uskoreniya-sajtov/