The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Кровосток, 07-Апр-22, 20:51  [смотреть все]
Уважаемые, доброго дня!

У меня свой самописный "фреймворк" назовём его так, и там соответственно свой класс для работы с БД MySQL, средства отладки и прочие личные хотелки.

Так вот, я хочу иметь возможность все генерируемые SQL запросы при включении дебага - чтобы автоматом проверялись на всякие SQL минусы. Типа того, что там например индексы не используются, или временная таблица на диске создалась... Я на самом деле просто в глубинах SQL не так силён, но хочу так сказать погрузиться.

Что у вас хочу спросить: Посоветуйте пожалуйста, как можно анализировать запрос, ну т.е. к примеру всем проходящим через обёртку работы с БД запросам SELECT перед их исполнением делать EXPLAIN и там анализировать то-то и то-то, и в случае таких-то проблем сигнализировать, что данный запрос потенциально "проблемный". Какие есть способы диагностики, может кроме EXPLAIN'а, с ним я немного знаком. Может там на уровне самой БД что-то можно включить, я смогу это связать со своим "конструктором".

  • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! ыы, 21:56 , 07-Апр-22 (1) +2
    > Уважаемые, доброго дня!
    > У меня свой самописный "фреймворк" назовём его так, и там соответственно свой
    > класс для работы с БД MySQL, средства отладки и прочие личные
    > хотелки.
    > Так вот, я хочу иметь возможность все генерируемые SQL запросы при включении
    > дебага - чтобы автоматом проверялись на всякие SQL минусы. Типа того,
    > что там например индексы не используются, или временная таблица на диске
    > создалась... Я на самом деле просто в глубинах SQL не так
    > силён, но хочу так сказать погрузиться.

    Тоесть вы хотите самостоятельно, повторно, анализировать план запроса который сгенерирует вам оптимизатор SQL сервера...

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

    И второе - использование индексов оправдано только в некоторых случаях. Есть много случаев когда использование индекса делает запрос медленнее... сююююрпрааааайзззззз :)))
    Временная таблица на диске создается только если она нужна. Просто так она не создается. Проверьте... :)


    > Что у вас хочу спросить: Посоветуйте пожалуйста, как можно анализировать запрос, ну
    > т.е. к примеру всем проходящим через обёртку работы с БД запросам
    > SELECT перед их исполнением делать EXPLAIN и там анализировать то-то и
    > то-то, и в случае таких-то проблем сигнализировать, что данный запрос потенциально
    > "проблемный". Какие есть способы диагностики, может кроме EXPLAIN'а, с ним я
    > немного знаком. Может там на уровне самой БД что-то можно включить,
    > я смогу это связать со своим "конструктором".

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

    • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Кровосток, 09:36 , 08-Апр-22 (3) +2
      > можно. можно включить трейс работы оптимизатора и получить простыню на несколько гигабайт...
      > но без багажа знаний хотябы на уровне DBA  в крупной
      > конторе, по-моему он будет не сильно полезен вам...

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

      • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! ыы, 11:21 , 08-Апр-22 (5) +3
        >> можно. можно включить трейс работы оптимизатора и получить простыню на несколько гигабайт...
        >> но без багажа знаний хотябы на уровне DBA  в крупной
        >> конторе, по-моему он будет не сильно полезен вам...
        > Нет, я не про то, что сервер БД чего-то делает не так,
        > а про то, что мои SQL запросы написаны неоптимально. Чтобы какую-то
        > диагностику своих запросов от сервера получать и автоматом на какие-то критерии
        > чтобы он мне сигнализировал, что типа вот запрос - который по
        > таким-то метрикам выглядит как неоптимально составленный.

        Сервер не знает что вы хотите. И не умеет угадывать ваши желания.

        • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Кровосток, 11:37 , 08-Апр-22 (6) +2
          > Сервер не знает что вы хотите. И не умеет угадывать ваши желания.

          Так я же не прошу и не собираюсь просить его об этом.

          Вот к примеру в выводе explain'а - можно отслеживать ситуацию когда filesort и куча строк и от этого момента анализировать что не так с запросом.
          А в переменных состояния MySQL - есть те, которые лучше бы не увеличивались и не появлялись. Так вот оперируя такого рода информацией, без необходимости кого-то просить что-то предугадать и т.п. - какие есть пути?

          • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! ыы, 15:06 , 08-Апр-22 (7) +2
            > от этого момента анализировать что не так  с запросом.

            Кто будет это делать?

            • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Кровосток, 17:37 , 08-Апр-22 (8) +1
              > Кто будет это делать?

              Так как кто? Сперва мой анализатор-дебаггер который я встрою в класс через который выполняются в моём приложении все запросы. А дальше уже из этого дебаггера при нахождении каких-то аномалий (запрограммированное мной срабатывание на анализируемые параметры) из этого класса себе буду сигнализировать, что вот тут сработка, и буду глядеть - разбирать.
              Т.е.

              public function _QUERY(string $sql, bool $isDebug)?resource {
                //Если нужен дебаг, то запускаем всё что для него надо
                if($isDebug){
                  $this->_PRE_DEBUG($sql);
                }

                //Затем выполняем сам запрос
                $result = $this->DBLink->($sql);

                //Выполнение если нужен дебаг каких-то действий после выполнения запроса
                $this->_POST_DEBUG();

                //Возврат результата запроса
                return $result;
              }

              protected function _PRE_DEBUG(string $sql){
                //Делаем EXPLAIN если это SELECT и обрабатываем
                if(substr(strtolower(trim($sql)), 0, 6) == 'select'){
                  //Добавляем EXPLAIN, обрабатываем данные из него, всё что требуется сигнализируем в лог для разработчика
                  $sql='EXPLAIN '.$sql;
                  .......
                  .......
                }

                protected function _POST_DEBUG(){
                  //Тут выполняем какие-то действия для дебага которые требуются уже после выполнения запроса
                  //типа запрашиваем данные по переменным MySQL и сравниваем их с теми, что были получены
                  //перед выполнением запроса, получаем их дельту и типа что-то если является триггером -
                  //то сигнализируем об этом в дебаг для разработчика.
                }
              }


              Т.е. напрограммировать получение требуемых данных и сформировать логику всего этого не проблема, проблема только в том, чтобы узнать - какие данные и метрики и у кого запрашивать.
              • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! ыы, 18:54 , 08-Апр-22 (9) +1
                >[оверквотинг удален]
                > их с теми, что были получены
                >     //перед выполнением запроса, получаем их дельту и типа
                > что-то если является триггером -
                >     //то сигнализируем об этом в дебаг для разработчика.
                >   }
                > }
                >
                > Т.е. напрограммировать получение требуемых данных и сформировать логику всего этого не
                > проблема, проблема только в том, чтобы узнать - какие данные и
                > метрики и у кого запрашивать.

                какие данные и метрики и у кого запрашивать станет понятно как только вы накидаете логику всего этого.
                Пока вы не накидали логику- нет никакой возможности определить какие метрики и данные вам нужны.

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

                Ну... вот вам метрики: https://www.datadoghq.com/blog/collecting-mysql-statistics-a.../
                или вот: https://www.opennet.dev/docs/RUS/mysqladm/admin.html
                используйте их не стесняясь :)

                • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Кровосток, 20:10 , 08-Апр-22 (10) +1
                  > Вы похожи на человека, который требует в железнодорожной кассе билет, наотрез отказываясь
                  > говорить куда же вам надо.
                  > Ну... вот вам метрики: https://www.datadoghq.com/blog/collecting-mysql-statistics-a.../
                  > или вот: https://www.opennet.dev/docs/RUS/mysqladm/admin.html
                  > используйте их не стесняясь :)

                  За performance_schema - спасибо! новенькое, не знал о такой штуке, пощупаю что такое.
                  А по поводу билетных касс - чтобы проще объяснить, вот к примеру обращаются к спецу для решения проблем с медленной работой БД в приложении, он что анализирует - на основе каких данных, вот я собственно это и спрашиваю. Т.е. что "щупать", чтобы выявлять аномалии в показателях и дальше уже на основе этих данных устранять причины.

                  За ссылки спасибо, если есть ещё полезные заметки - буду благодарен!
                  Раньше с такими вопросами на sql.ru обращался, но он тут что-то уже месяца полтора как на тех.обслуживании, и ищу ответов тут.

  • Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Аноним, 23:13 , 07-Апр-22 (2) +2
    Начиная с какого-то уровня сложности выборок нельзя просто так взять и сказать, что запрос неоптимален. Вы хотите искусственный интеллект изобрести.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру