Mysql
 sql >> база данни >  >> RDS >> Mysql

Алтернативи на pt-query-digest - MySQL управление на заявки и наблюдение с ClusterControl

Когато натоварването на вашата база данни е прекомерно натоварено, първо искате да видите какви заявки се изпълняват в опит да видите модела на заявката. Тежко ли се пише? Четете тежко? Къде е тесното място?

Идентифициране на проблеми със заявката

За да разберете това, можете да активирате общия регистрационен файл или бавния дневник, за да се опитате да уловите заявките, които се изпълняват  и записват във файла. Можете също да четете от двоичния дневник (тъй като двоичният дневник улавя всички промени в базата данни) и да гледате четенията директно от работещия списък с процеси в базата данни. Можете дори да уловите заявката от гледна точка на мрежата, като прегледате tcpdump.

Какво да правя след това? Можете да анализирате заявката, която е записана в общ регистрационен файл, бавен лог файл, двоичен дневник, за да проверите дали има нещо интересно (напр. затруднение в заявката).

Percona има инструмент за анализиране на тези типове заявки, наречен pt-query-digest. Той е включен, когато инсталирате Percona Toolkit, колекция от помощни инструменти, които помагат на DBA да управлява своите бази данни. В този блог ще разгледаме този инструмент и как той се сравнява с функциите за управление на заявки на ClusterControl.

Процедура за инсталиране

Хранищата на Percona поддържат два пакета Linux Distribution за настройка, което е базирано на Debian и базирано на RPM пакети. Инсталацията е просто, както е показано по-долу:

базиран на Debian пакет (Ubuntu, Debian)

Конфигурирайте хранилищата на пакети Percona, като изтеглите пакета

wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb

И след това инсталирайте изтегления пакет с помощта на dpkg

sudo dpkg -i percona-release_latest.generic_all.deb

След това просто стартирайте инсталацията от мениджъра на пакети

sudo apt-get install percona-toolkit

базиран на RPM пакет (RHEL, CentOS, Oracle Enterprise Linux, Amazon AMI)

Конфигурирайте хранилищата на пакети Percona, като инсталирате директно пакета rpm.

sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 

След това просто стартирайте инсталацията от мениджъра на пакети

sudo apt-get install percona-toolkit

Помощните програми на Percona ще бъдат инсталирани на вашата машина и просто трябва да ги използвате.

Анализ на работното натоварване на заявка

Има няколко начина за генериране на статистически данни от работното натоварване на заявката с помощта на pt-query-digest, по-долу е командата как да го направите с помощта на бавен файл със заявка, общ файл, показване на списък с процеси в базата данни и четене чрез двоичен журнал.

Генериране от базата данни за списък с процеси

pt-query-digest --processlist h=localhost,D=sbt,u=sbtest,p=12qwaszx --output slowlog > /tmp/slow_query.log

Генерирайте от бавните файлове за заявка / файл с обща заявка

pt-query-digest mysql-slow.log > /tmp/slow_query.log

Генериране от двоичен дневник. Преди да стартирате pt-query-digest, трябва да извлечете двоичния дневник в четим формат, като използвате mysqlbinlog. Не забравяйте да добавите опция --type и въведете binlog като източник.

pt-query-digest --type binlog mysql-bin.000001.txt > slow_query.log

След като приключите с генерирането на файла, ще видите отчета, както е показано по-долу:

# 12s user time, 170ms system time, 27.44M rss, 221.79M vsz

# Current date: Sun May 10 21:40:47 2020

# Hostname: n2

# Files: mysql-1

# Overall: 94.92k total, 47 unique, 2.79k QPS, 27.90x concurrency ________

# Time range: 2020-05-10 21:39:37 to 21:40:11

# Attribute          total     min     max     avg     95%  stddev  median

# ============     ======= ======= ======= ======= ======= ======= =======

# Exec time           949s     6us      1s    10ms    42ms    42ms     2ms

# Lock time            31s       0      1s   327us    80us    11ms    22us

# Rows sent         69.36k       0     490    0.75    0.99   11.30       0

# Rows examine     196.34k       0     490    2.12    0.99   21.03    0.99

# Rows affecte      55.28k       0      15    0.60    0.99    1.26       0

# Bytes sent        13.12M      11   6.08k  144.93  299.03  219.02   51.63

# Query size        15.11M       5     922  166.86  258.32   83.13  174.84



# Profile

# Rank Query ID                      Response time  Calls R/Call V/M   Ite

# ==== ============================= ============== ===== ====== ===== ===

#    1 0xCE367F5CFFCAF46E816F682E... 162.6485 17.1%   199 0.8173  0.03 SELECT order_line? stock?

#    2 0x360F872745C81781F8F75EDE... 107.4898 11.3% 14837 0.0072  0.02 SELECT stock?

#    3 0xE0CE1933D0392DA3A42FAA7C... 102.2281 10.8% 14866 0.0069  0.03 SELECT item?

#    4 0x492B86BCB2B1AE1278147F95...  98.7658 10.4% 14854 0.0066  0.04 INSERT order_line?

#    5 0x9D086C2B787DC3A308043A0F...  93.8240  9.9% 14865 0.0063  0.02 UPDATE stock?

#    6 0x5812BF2C6ED2B9DAACA5D21B...  53.9681  5.7%  1289 0.0419  0.05 UPDATE customer?

#    7 0x51C0DD7AF0A6D908579C28C0...  44.3869  4.7%   864 0.0514  0.03 SELECT customer?

#    8 0xFFFCA4D67EA0A788813031B8...  41.2123  4.3%  3250 0.0127  0.01 COMMIT

#    9 0xFDDEE3813C59881488D9C47F...  36.0707  3.8%  1180 0.0306  0.02 UPDATE customer?

#   10 0x8FBBE0AFA061755CCC1C27AB...  31.6417  3.3%  1305 0.0242  0.03 UPDATE orders?

#   11 0x8AA6EB56551923DB9A49E40A...  23.3281  2.5%  1522 0.0153  0.04 SELECT customer? warehouse?

#   12 0xF34C10B3DA8DB048A630D4C7...  21.1662  2.2%  1305 0.0162  0.03 UPDATE order_line?

#   13 0x59DBA67188951C532AFC2598...  20.8006  2.2%  1503 0.0138  0.33 INSERT new_orders?

#   14 0xDADBEB0FBFA537F5D8722F42...  17.2802  1.8%  1290 0.0134  0.03 SELECT customer?

#   15 0x597A805ADA793440507F3334...  16.4394  1.7%  1516 0.0108  0.03 INSERT orders?

#   16 0x1B1EA568857A6AAC6544B44A...  13.9560  1.5%  1309 0.0107  0.05 SELECT new_orders?

#   17 0xCE3EDD98779478DE17154DCE...  12.1470  1.3%  1322 0.0092  0.05 INSERT history?

#   18 0x9DFD75E88091AA333A777668...  11.6842  1.2%  1311 0.0089  0.05 SELECT orders?

# MISC 0xMISC                         39.6393  4.2% 16334 0.0024   0.0 <29 ITEMS>



# Query 1: 6.03 QPS, 4.93x concurrency, ID 0xCE367F5CFFCAF46E816F682E53C0CF03 at byte 30449473

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.03

# Time range: 2020-05-10 21:39:37 to 21:40:10

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count          0     199

# Exec time     17    163s   302ms      1s   817ms   992ms   164ms   816ms

# Lock time      0     9ms    30us   114us    44us    84us    18us    36us

# Rows sent      0     199       1       1       1       1       0       1

# Rows examine  39  76.91k     306     468  395.75  441.81   27.41  381.65

# Rows affecte   0       0       0       0       0       0       0       0

# Bytes sent     0  15.54k      79      80   79.96   76.28       0   76.28

# Query size     0  74.30k     382     384  382.35  381.65       0  381.65

# String:

# Databases    sbt

# Hosts        localhost

# Last errno   0

# Users        sbtest

# Query_time distribution

#   1us

#  10us

# 100us

#   1ms

#  10ms

# 100ms  ################################################################

#    1s  ####

#  10s+

# Tables

#    SHOW TABLE STATUS FROM `sbt` LIKE 'order_line6'\G

#    SHOW CREATE TABLE `sbt`.`order_line6`\G

#    SHOW TABLE STATUS FROM `sbt` LIKE 'stock6'\G

#    SHOW CREATE TABLE `sbt`.`stock6`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT COUNT(DISTINCT (s_i_id))

                        FROM order_line6, stock6

                       WHERE ol_w_id = 1

                         AND ol_d_id = 1

                         AND ol_o_id < 3050

                         AND ol_o_id >= 3030

                         AND s_w_id= 1

                         AND s_i_id=ol_i_id

                         AND s_quantity < 18\G



# Query 2: 436.38 QPS, 3.16x concurrency, ID 0x360F872745C81781F8F75EDE9DD44246 at byte 30021546

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.02

# Time range: 2020-05-10 21:39:37 to 21:40:11

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count         15   14837

# Exec time     11    107s    44us   233ms     7ms    33ms    13ms     3ms

# Lock time      1   522ms    15us   496us    35us    84us    28us    23us

# Rows sent     20  14.49k       1       1       1       1       0       1

# Rows examine   7  14.49k       1       1       1       1       0       1

# Rows affecte   0       0       0       0       0       0       0       0

# Bytes sent    28   3.74M     252     282  264.46  271.23    8.65  258.32

# Query size    19   3.01M     209     215  213.05  212.52    2.85  212.52

# String:

# Databases    sbt

# Hosts        localhost

# Last errno   0

# Users        sbtest

# Query_time distribution

#   1us

#  10us  #

# 100us  ##

#   1ms  ################################################################

#  10ms  #############

# 100ms  #

#    1s

#  10s+

# Tables

#    SHOW TABLE STATUS FROM `sbt` LIKE 'stock9'\G

#    SHOW CREATE TABLE `sbt`.`stock9`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT s_quantity, s_data, s_dist_01 s_dist

                                                      FROM stock9

                                                    WHERE s_i_id = 60407 AND s_w_id= 2 FOR UPDATE\G

Както можете да видите в горния резултат от отчета pt-query-digest, можем да разделим на 3 части.

Обобщен отчет 

Има много информация, която можете да намерите в обобщения отчет, като се започне от сървъра за имена на хост, датата на изпълнение на командата, информацията, свързана с регистрирането на заявката, QPS и улавянето на времевия период. Освен това можете да видите и статистика за времето за всеки атрибут.

# 12s user time, 170ms system time, 27.44M rss, 221.79M vsz

# Current date: Sun May 10 21:40:47 2020

# Hostname: n2

# Files: mysql-1

# Overall: 94.92k total, 47 unique, 2.79k QPS, 27.90x concurrency ________

# Time range: 2020-05-10 21:39:37 to 21:40:11

# Attribute          total     min     max     avg     95%  stddev  median

# ============     ======= ======= ======= ======= ======= ======= =======

# Exec time           949s     6us      1s    10ms    42ms    42ms     2ms

# Lock time            31s       0      1s   327us    80us    11ms    22us

# Rows sent         69.36k       0     490    0.75    0.99   11.30       0

# Rows examine     196.34k       0     490    2.12    0.99   21.03    0.99

# Rows affecte      55.28k       0      15    0.60    0.99    1.26       0

# Bytes sent        13.12M      11   6.08k  144.93  299.03  219.02   51.63

# Query size        15.11M       5     922  166.86  258.32   83.13  174.84

Профилиране на заявка въз основа на ранг 

Можете да видите полезна информация в заявката за профилиране.

# Profile

# Rank Query ID                      Response time  Calls R/Call V/M   Ite

# ==== ============================= ============== ===== ====== ===== ===

#    1 0xCE367F5CFFCAF46E816F682E... 162.6485 17.1%   199 0.8173  0.03 SELECT order_line? stock?

#    2 0x360F872745C81781F8F75EDE... 107.4898 11.3% 14837 0.0072  0.02 SELECT stock?

Има много информация, като например изпълняваните заявки, времето за отговор на заявката (включително процентното изчисление), колко обаждания прави заявката и четения на обаждане.

Разпространение на заявки

Статистиката за разпределение на заявките описва подробна информация въз основа на ранга на профилиране на заявка, можете да видите паралелността на QPS, статистическа информация, свързана с атрибута на заявката.

# Query 1: 6.03 QPS, 4.93x concurrency, ID 0xCE367F5CFFCAF46E816F682E53C0CF03 at byte 30449473

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.03

# Time range: 2020-05-10 21:39:37 to 21:40:10

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count          0     199

# Exec time     17    163s   302ms      1s   817ms   992ms   164ms   816ms

# Lock time      0     9ms    30us   114us    44us    84us    18us    36us

# Rows sent      0     199       1       1       1       1       0       1

# Rows examine  39  76.91k     306     468  395.75  441.81   27.41  381.65

# Rows affecte   0       0       0       0       0       0       0       0

# Bytes sent     0  15.54k      79      80   79.96   76.28       0   76.28

# Query size     0  74.30k     382     384  382.35  381.65       0  381.65

# String:

# Databases    sbt

# Hosts        localhost

# Last errno   0

# Users        sbtest

# Query_time distribution

#   1us

#  10us

# 100us

#   1ms

#  10ms

# 100ms  ################################################################

#    1s  ####

#  10s+

# Tables

#    SHOW TABLE STATUS FROM `sbt` LIKE 'order_line6'\G

#    SHOW CREATE TABLE `sbt`.`order_line6`\G

#    SHOW TABLE STATUS FROM `sbt` LIKE 'stock6'\G

#    SHOW CREATE TABLE `sbt`.`stock6`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT COUNT(DISTINCT (s_i_id))

                        FROM order_line6, stock6

                       WHERE ol_w_id = 1

                         AND ol_d_id = 1

                         AND ol_o_id < 3050

                         AND ol_o_id >= 3030

                         AND s_w_id= 1

                         AND s_i_id=ol_i_id

                         AND s_quantity < 18\G

Има също информация относно разпределението на времето на заявка, хост, потребител и база данни.

Наблюдение на заявки с ClusterControl

ClusterControl има функция за наблюдение на заявки, която можете да намерите в раздела Монитор на заявки, както е показано по-долу.

Можете да видите информация, свързана със заявката, която се изпълнява в базата данни, включително статистическа информация и време за изпълнение. Можете също да конфигурирате настройката за монитор на заявки, която все още е на същата страница. Има опция да активирате бавната заявка и заявките, които не използват индекс, като щракнете върху Настройки

Трябва само да зададете дългото време на заявка, което е прагът на заявката, която категоризира за дълго въз основа на времето на изпълнение. Също така има опция за активиране на заявката, която не използва индекси.

Заключение

Наблюдението и анализирането на работното натоварване на заявката може да бъде полезно, така че да познавате и разбирате работното си натоварване на базата данни, както pt-query-digest, така и ClusterControl Query Monitor предоставят информация, свързана със заявката, изпълнявана в базата данни, за да ви помогне да постигнете това разбиране.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LINQ to Entities не разпознава метода 'System.String ToString()' и този метод не може да бъде преведен в израз на магазин

  2. MySQL CAST срещу CONVERT

  3. Нормализиране в MYSQL

  4. Свържете се с отдалечена база данни MySQL чрез SSH с помощта на Java

  5. Как да извършите търсене, чувствително към акцента в MySql