MySQL 优化脚本(analyze)引起的应用崩溃
早上刚走进公司的门口,快走到办公桌的时候,开发的同事很着急的跟我说:你可来了!我:发生什么事情了?开发同事:XX数据库死掉了!我:特别惊讶!这个库运行的
早上刚走进公司的门口,,快走到办公桌的时候,开发的同事很着急的跟我说:你可来了!
我:SELECT.......
注意红色字体的关键字,官网的解释是:
Flushing tables
The thread is executing FLUSH TABLES and is waiting for all threads to close their tables.
也就是说线程执行刷新表操作并且等待所有的线程关闭他们占用的表。
一个超长执行时间的SQL被发现了,这个SQL大概执行了十几个小时还没有查出结果。
但是这样也不应该回引起flush tables 的问题出现。
kill 掉这个SQL线程之后,慢慢的系统恢复了正常查询的状态。
就这样粗暴的处理完成之后,就看系统各种的日志,开始查找原因,突然想到今天是周末
对呀周末!!
周末会怎样呢?
周末有一个优化脚本任务执行的!
这个优化脚本就是使用analyze去分析每张表,analyze会收集表的统计信息。
会导致mysql检测到对应的table做了修改,必须执行flush操作,close和reopen表
由此可以推断出,是因为那个执行时间超长的SQL在执行过程中,我的优化脚本任务也启动了,对SQL占用的表进行了analyze 那张表就需要被close和reopen。但是SQL写的太烂,一直没有执行完成,也就不能释放对表的占用。以至于后面的SQL就要排队等待。
只要将那个SQL给kill掉就关闭了表,然后续的SQL就重新打开了那个表,正常!
我根据推断做了一个测试,首先手工执行那个烂SQL等待了一会儿没有查出结果的迹象,在这个时候使用analyze table table_name;
show processlit 查看状态,果然如此!截图中红色框部分
实验证明了是analyze引起的问题,但不是主要的问题。
于是和开发商量需要改进SQL进行优化。搞定!
本文出自 “影子骑士” 博客,请务必保留此出处

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Il existe deux façons d'implémenter le multithreading en Java, l'une consiste à hériter de la classe Thread et l'autre à implémenter l'interface Runnable ; la classe Thread est définie dans le package java.lang. Tant qu'une classe hérite de la classe Thread et remplace la méthode run() dans cette classe, elle peut implémenter des opérations multithread. Cependant, une classe ne peut hériter que d'une seule classe parent, ce qui constitue une limitation de cette méthode. Regardons un exemple : packageorg.thread.demo;classMyThreadextendsThread{privateStringname;publicMyThread(Stringname){super();this

Analyse approfondie du rôle et de l'utilisation du mot-clé static en langage C. En langage C, static est un mot-clé très important, qui peut être utilisé dans la définition de fonctions, de variables et de types de données. L'utilisation du mot-clé static peut modifier les attributs de lien, la portée et le cycle de vie de l'objet. Analysons en détail le rôle et l'utilisation du mot-clé static en langage C. Variables et fonctions statiques : les variables définies à l'aide du mot-clé static à l'intérieur d'une fonction sont appelées variables statiques et ont un cycle de vie global.

Le rôle et les exemples du mot-clé var en PHP En PHP, le mot-clé var permet de déclarer une variable. Dans les versions précédentes de PHP, l'utilisation du mot-clé var était la manière idiomatique de déclarer les variables membres, mais son utilisation n'est plus recommandée. Cependant, dans certains cas, le mot-clé var est toujours utilisé. Le mot-clé var est principalement utilisé pour déclarer une variable locale et marquer automatiquement la variable comme portée locale. Cela signifie que la variable n'est visible que dans le bloc de code actuel et n'est pas accessible dans d'autres fonctions ou blocs de code. Utiliser var

Titre : Go est-il un mot-clé en langage C ? Analyse détaillée En langage C, "go" n'est pas un mot-clé. Les mots-clés en langage C sont spécifiés par le standard C et sont utilisés pour représenter des structures ou des fonctions grammaticales spécifiques. Ils ont des significations particulières dans le compilateur et ne peuvent pas être utilisés comme identifiants ou noms de variables. Par exemple, le mot clé « int » représente un type de données entier, « if » représente une instruction conditionnelle, etc. Si nous voulons vérifier si « go » est un mot-clé en langage C, nous pouvons écrire un programme simple pour le tester. Voici un exemple : #inc

Il existe 32 mots-clés en langage C. Selon la fonction des mots-clés, ils peuvent être divisés en quatre catégories : mots-clés de type de données, mots-clés d'instructions de contrôle, mots-clés de type de stockage et autres mots-clés. Il existe 12 mots-clés de type de données, dont char, double, float, int, etc. ; il existe 12 mots-clés d'instruction de contrôle, dont for, break, if, else, do, etc. ; il existe 4 mots-clés de type de stockage, dont auto, static , extern, etc. ; il y a 4 autres mots-clés, dont const, sizeof, etc.

En Java, lorsqu'il s'agit de threads, Thread est essentiel. Un thread est un exécuteur planifié plus léger qu’un processus. Pourquoi utiliser des fils de discussion ? En utilisant des threads, vous pouvez séparer l'allocation des ressources et la planification de l'exécution dans les processus du système d'exploitation. Chaque thread peut non seulement partager des ressources de processus (adresse mémoire, E/S de fichier, etc.), mais peut également être planifié indépendamment (les threads sont l'unité de base de la planification du processeur). Remarque 1. Thread est la classe la plus importante pour créer des threads, et le mot lui-même représente également thread. 2. La classe Thread implémente l'interface Runnable. Instance publicclassThreadDemoextendsThread{publicvoidrun(){for(inti=0

Explication détaillée du rôle et de l'utilisation du mot-clé extends en PHP Dans la programmation PHP, extends est un mot-clé très important, utilisé pour implémenter l'héritage de classe. Grâce au mot-clé extends, nous pouvons créer une nouvelle classe qui peut hériter des propriétés et des méthodes d'une ou plusieurs classes existantes. L'héritage est un concept important dans la programmation orientée objet, qui rend la réutilisation et l'extension du code plus pratiques et plus flexibles. Cet article présentera en détail la fonction et l'utilisation du mot-clé extends. s'étend

Utilisez la fonction Thread.start() de Java pour démarrer un nouveau thread En Java, nous pouvons utiliser le multithreading pour exécuter plusieurs tâches simultanément. Java fournit la classe Thread pour créer et gérer des threads. La fonction start() de la classe Thread est utilisée pour démarrer un nouveau thread et exécuter le code dans la méthode run() du thread. Exemple de code : publicclassMyThreadextendsThread{@Overr
