Spec-Zone.ru › MySQL Connectors 1.0

5.12.2.1 Просмотр информации трассировки MySQL

В этом разделе описывается, как настроить приложение для просмотра информации трассировки MySQL.

В первую очередь необходимо создать подходящий app.config файл для вашего приложения. Например:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="mysql" switchName="SourceSwitch"
        switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <add name="console" />
          <remove name ="Default" />
        </listeners>
      </source>
    </sources>
    <switches>
      <!-- You can set the level at which tracing is to occur -->
      <add name="SourceSwitch" value="Verbose" />
      <!-- You can turn tracing off -->
      <!--add name="SourceSwitch" value="Off" -->
    </switches>
    <sharedListeners>
      <add name="console"
        type="System.Diagnostics.ConsoleTraceListener"
        initializeData="false"/>
    </sharedListeners>
  </system.diagnostics>
</configuration>

Эта конфигурация обеспечивает создание соответствующего источника трассировки, а также переключатель. Уровень переключателя в данном случае установлен на Verbose для отображения максимального количества информации.

Далее, добавьте logging=true в строку подключения в вашем приложении C# . Например:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using MySql.Data;
using MySql.Data.MySqlClient;
using MySql.Web;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            string connStr = "server=localhost;user=root;database=world;port=3306;password=******;logging=true";
            MySqlConnection conn = new MySqlConnection(connStr);
            try
            {
                Console.WriteLine("Connecting to MySQL...");
                conn.Open();

                string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                MySqlDataReader rdr = cmd.ExecuteReader();

                while (rdr.Read())
                {
                    Console.WriteLine(rdr[0] + " -- " + rdr[1]);
                }

                rdr.Close();

                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.WriteLine("Done.");
        }
    }
}

Это простое приложение затем генерирует следующий вывод:

Connecting to MySQL...
mysql Information: 1 : 1: Connection Opened: connection string = 'server=localhost;User Id=root;database=world;port=3306
;password=******;logging=True'
mysql Information: 3 : 1: Query Opened: SHOW VARIABLES
mysql Information: 4 : 1: Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1
mysql Information: 5 : 1: Resultset Closed. Total rows=272, skipped rows=0, size (bytes)=7058
mysql Information: 6 : 1: Query Closed
mysql Information: 3 : 1: Query Opened: SHOW COLLATION
mysql Information: 4 : 1: Resultset Opened: field(s) = 6, affected rows = -1, inserted id = -1
mysql Information: 5 : 1: Resultset Closed. Total rows=127, skipped rows=0, size (bytes)=4102
mysql Information: 6 : 1: Query Closed
mysql Information: 3 : 1: Query Opened: SET character_set_results=NULL
mysql Information: 4 : 1: Resultset Opened: field(s) = 0, affected rows = 0, inserted id = 0
mysql Information: 5 : 1: Resultset Closed. Total rows=0, skipped rows=0, size (bytes)=0
mysql Information: 6 : 1: Query Closed
mysql Information: 10 : 1: Set Database: world
mysql Information: 3 : 1: Query Opened: SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'
mysql Information: 4 : 1: Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1
American Samoa -- George W. Bush
Australia -- Elisabeth II
...
Wallis and Futuna -- Jacques Chirac
Vanuatu -- John Bani
United States Minor Outlying Islands -- George W. Bush
mysql Information: 5 : 1: Resultset Closed. Total rows=28, skipped rows=0, size (bytes)=788
mysql Information: 6 : 1: Query Closed
Done.
mysql Information: 2 : 1: Connection Closed

Первое число, отображаемое в сообщении трассировки, соответствует типу события MySQL. Второе число в сообщении трассировки — это количество подключений. Следующая таблица описывает каждый тип события MySQL.

Тип события Описание
1 ConnectionOpened: строка подключения
2 ConnectionClosed:
3 QueryOpened: идентификатор потока сервера MySQL, текст запроса
4 ResultOpened: количество полей, затронутые строки (-1, если select), вставленный идентификатор (-1, если select)
5 ResultClosed: общее количество прочитанных строк, пропущенных строк, размер набора результатов в байтах
6 QueryClosed:
7 StatementPrepared: подготовленный SQL, идентификатор запроса
8 StatementExecuted: идентификатор запроса, идентификатор потока сервера MySQL
9 StatementClosed: идентификатор запроса
10 NonQuery: [меняется]
11 UsageAdvisorWarning: флаг советчика по использованию. NoIndex = 1, BadIndex = 2, SkippedRows = 3, SkippedColumns = 4, FieldConversion = 5.
12 Warning: уровень, код, сообщение
13 Error: номер ошибки, сообщение об ошибке

Хотя в этом примере используется ConsoleTraceListener, можно использовать любые другие стандартные слушатели. Другой вариант — создать пользовательского слушателя, который использует информацию, переданную методом TraceEvent. Например, можно создать пользовательского слушателя трассировки для активного мониторинга сообщений событий MySQL, а не просто записи их в устройство вывода.

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

MySqlTrace.Listeners.Add(new ConsoleTraceListener());

Connector/NET предоставляет возможность включения и выключения трассировки во время выполнения. Этого можно достичь с помощью вызовов MySqlTrace.EnableQueryAnalyzer(string host, int postInterval) и MySqlTrace.DisableQueryAnalyzer(). Параметр host — это URL-адрес сервера MySQL Enterprise Monitor для мониторинга. Параметр postInterval — это частота отправки данных на сервер MySQL Enterprise Monitor в секундах.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-programming-tracing-mysql.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API