Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 15232|Отговор: 3

[Източник] MySQL CPU за 100% високо решение

[Копирай линк]
Публикувано в 11.10.2018 г. 11:20:31 ч. | | | |
Отворете диспечера на задачите на сървъра и установете, че процесорният процес винаги е бил 99%, а изгледът е зает от mySQL процеса, който е бил висок.


Изходът на командата processlist показва кои нишки работят и можете да проверите текущото състояние на базата данни.

1. Отидете в директорията mysql/bin и въведете mysqladmin processlist;
2. Стартирай mySQL и въведе show processlist.
Ако имаш SUPER разрешение, можеш да виждаш всички теми, иначе можеш да виждаш само темите на акаунта си.





Значението и целта на всяка колона

id: Идентификатор
User: показва текущия потребител, ако не е root, тази команда ще показва само SQL оператори в рамките на вашите права.
host: показва от кой IP идва това изявление от кой порт
db: Показва базата данни, към която процесът е свързан в момента.
команда: Показва командите, изпълнени от текущата връзка, обикновено sleep, request и connect.
време: Времето, което това състояние продължава, в секунди.
състояние: Показва статуса на SQL оператора, който използва текущата връзка, но само определено състояние при изпълнение на оператора, SQL оператор, е било запитано, например може да се наложи да премине през копиране в tmp таблица, сортиране на резултат, изпращане на данни и др.
info: Показва това SQL твърдение, защото дължината е ограничена, така че дългата SQL инструкция не се показва напълно, но е важна основа за оценка на проблемното твърдение.


Установено е, че има две SQL заявки, които отнемат най-дълго време и не са изпълнявани повече от 1000 секунди, а SQL операторите, които копирахме от информационното поле, са съвместна заявка, както следва:

изберете cast(count(*) as SIGNED) като col_0_0_ от 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ където baseinfoco1_. CompanyId=ratedpasse0_. CompanyId и ordermatch2_. OrderId=ratedpasse0_. OrderId

Убиваме процеса на тези две заявки

След като изчаках 10 секунди, установих, че процесорът е паднал значително, но все още беше много висок, и ще продължа да разпитвам причината!



За заявката join joint добавете индекс към свързаното поле или променете кода на заявката на програмата.
Създайте индексно SQL изявление

Край





Предишен:C# Влезте в Wordpress
Следващ:Модифициране на метода на картографиране на портове за docker контейнери
 Хазяин| Публикувано в 11.10.2018 г. 13:03:02 ч. |
Най-критичната от тази команда е колоната със състояния, а щатите, изброени в mysql, са основно следните:

Таблица за проверка  
  Проверявам техническия лист (това е автоматично).  
  Затварящи маси  
  Данните, променени в таблицата, се промиват на диска, а изразходваната таблица се затваря. Това е бърза операция, ако не, трябва да проверите дали дисковото пространство е пълно или дискът е под натоварване.  
  Свържете се  
  Сървърът за репликационно подчинение се свързва с основния сървър.  
  Копиране в tmp таблица на диск  
  Тъй като временният набор от резултати е по-голям от tmp_table_size, временната таблица се преобразува от вградена в паметта в дискова памет, за да се запази паметта.  
  Създаване на tmp таблица  
  Създава се временна таблица, която да съхранява част от резултатите от заявките.  
  Изтриване от основната таблица  
  Сървърът извършва първата част от изтриване на мулти-таблица и току-що е изтрил първата таблица.  
  Изтриване от референтните таблици  
  Сървърът извършва втората част от изтриването на множество таблици, а именно изтриване на записи от други таблици.  
  Маси за промиване  
  Правя FLUSH TABLES, чакам други нишки да затворят таблицата с данни.  
  Убит  
  Ако заявка за убиване бъде изпратена към нишка, тя ще провери флага за убиване и ще изостави следващата заявка за убиване. MySQL проверява за флагове за убиване във всеки основен цикъл, въпреки че в някои случаи нишката може да прекъсне за кратък период от време. Ако нишката е заключена от друга нишка, заявката за прекратяване влиза в сила веднага щом заключването бъде освободено.  
  Заключено  
  Заключен от други запитвания.  
  Изпращане на данни  
  Записът на заявката SELECT се обработва, докато резултатите се изпращат на клиента.  
  Сортиране за група  
  Сортиране за GROUP BY.  
  Сортиране по поръчка  
  Сортирането се извършва за ORDER BY.  
  Откриващи таблици  
  Този процес трябва да е бърз, освен ако не е пречен от други фактори. Например, таблица с данни не може да бъде отворена от друга нишка, докато не се изпълни операторът ALTER TABLE или LOCK TABLE. Опитвам се да отворя маса.  
  Премахване на дубликати  
  Изпълнява се заявка SELECT DISTINCT, но MySQL не може да оптимизира дублиращите се записи в предишния етап. Затова MySQL трябва отново да премахне дублиращите се записи, преди да изпрати резултатите на клиента.  
  Отново отваряне на масата  
  Заключване на таблицата се получава, но то трябва да бъде променено след като структурата на таблицата бъде променена. Вече освободих заключването, затворих datasheet-а и се опитва да отворя отново таблицата с данни.  
  Ремонт чрез сортиране  
  Инструкцията за фиксиране е сортиране, за да се създаде индекс.  
  Ремонт с keycache  
  Директивата fix използва индексния кеш, за да създава нови индекси един по един. Ще бъде по-бавен от Repair чрез сортиране.  
  Търсене на редове за актуализация  
  Допустимите записи се идентифицират за актуализации. Това трябва да се направи преди АКТУАЛИЗАЦИЯТА да промени съответния запис.  
  Сън  
  Чакам клиентът да изпрати нова заявка.  
  Системно заключване  
  Чакам да получа външна системна заключване. Ако няма mysqld сървъри, които да работят едновременно и да искат същата таблица, външните системни заключвания могат да бъдат забранени чрез добавяне на параметъра –skip-external-locking.  
  Надграждане на шлюза  
  INSERT DELAYED се опитва да получи заключваща таблица, за да вмъкне нов запис.  
  Актуализация  
  Търсене на съвпадащи записи и тяхното модифициране.  
  Потребителско заключване  
  чака GET_LOCK().  
  Сервиране на маси  
  Нишката беше уведомена, че структурата на техническия лист е модифицирана и трябва да бъде отворена отново, за да получи новата структура. След това, за да отворите отново таблицата с данни, трябва да изчакате всички останали нишки да я затворят. Това известие се случва в следните случаи: FLUSH TABLES tbl_name, ALTER TABLE, ПРЕИМЕНУВАНЕ НА ТАБЛИЦА, REPAIR TABLE, ANALYZE TABLE или OPTIMIZE TABLE.  
  Чакане за въвеждане на обработвача  
  INSERT DELAYED е обработил всички чакащи вмъкнати документи и чака нова заявка.  
  Повечето състояния съответстват на бързи операции, стига нишката да остане в същото състояние за няколко секунди, може да има проблем, който трябва да се провери.
 Хазяин| Публикувано в 1.03.2019 г. 10:26:49 ч. |
Официална документация:https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html
 Хазяин| Публикувано в 1.03.2019 г. 10:34:13 ч. |


Отнема 10 секунди да се направи заявка към дадено парче данни.
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com