Существует ли способ получить rows_examined в MySQL без медленного журнала?

На работе мы делаем что-то вроде этого от кода ASP позади:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Const jQuery As String = "jQuery"

  With Me.Page.ClientScript
    If Not .IsClientScriptIncludeRegistered(jQuery) Then
      .RegisterClientScriptInclude(jQuery, VirtualPathUtility.ToAbsolute("~/Includes/jQuery-1.2.6.js"))
    End If
  End With
End Sub

я не знаю, возможно ли сделать это с ASP.NET MVC.

5
задан Mark Amery 25 February 2017 в 18:58
поделиться

3 ответа

Это немного лучше, чем было в 2006 году. Вы можете задать SHOW SESSION STATUS до и после, а затем посмотреть на каждое из счетчиков Handler_read_ *, чтобы уметь определять количество проверенных строк.

На самом деле другого пути нет .. Хотя в протоколе сервера есть флаг, указывающий, произошло ли сканирование таблицы, он не раскрывает rows_examined. Даже такие инструменты, как MySQL Query Analyzer, должны работать, выполняя SHOW SESSION STATUS до / после (хотя я думаю, что он запускает SHOW SESSION STATUS только после , поскольку он запоминает предыдущие значения).

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

http://www.percona.com/docs/wiki/patches:microslow_innodb#changes_to_the_log_format

Я могу порекомендовать поискать "Disk_tmp_table : Да »и« Disk_filesort: Да ».

4
ответ дан 14 December 2019 в 08:54
поделиться

Из документации :

Handler_read_rnd

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

Handler_read_rnd_next

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

read_rnd * означает чтение фактических строк таблицы с полным сканированием.

Обратите внимание, что это будет ничего не показывать, если есть сканирование индекса в сочетании с поиском строки, оно все равно считается чтением ключа.

1
ответ дан 14 December 2019 в 08:54
поделиться

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

Вот документация .

0
ответ дан 14 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: