데이터 베이스 MySQL 튜토리얼 MySQL 优化脚本(analyze)引起的应用崩溃

MySQL 优化脚本(analyze)引起的应用崩溃

Jun 07, 2016 pm 05:36 PM
thread 키워드

早上刚走进公司的门口,快走到办公桌的时候,开发的同事很着急的跟我说:你可来了!我:发生什么事情了?开发同事: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 查看状态,果然如此!截图中红色框部分

wKioL1LkuZqzmw-5AAPWQXlp6PY602.jpg

实验证明了是analyze引起的问题,但不是主要的问题。

于是和开发商量需要改进SQL进行优化。搞定!

















本文出自 “影子骑士” 博客,请务必保留此出处

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java에서 Runnable과 Thread의 차이점은 무엇입니까? Java에서 Runnable과 Thread의 차이점은 무엇입니까? May 07, 2023 pm 05:19 PM

Java에서 멀티스레딩을 구현하는 방법에는 두 가지가 있습니다. 하나는 Thread 클래스를 상속하는 것이고, 다른 하나는 Runnable 인터페이스를 구현하는 것입니다. Thread 클래스는 java.lang 패키지에 정의되어 있습니다. 클래스가 Thread 클래스를 상속하고 이 클래스의 run() 메서드를 재정의하는 한 다중 스레드 작업을 구현할 수 있습니다. 그러나 클래스는 하나의 상위 클래스만 상속할 수 있으며 이는 이 메서드의 제한 사항입니다. 예를 살펴보겠습니다: packageorg.thread.demo;classMyThreadextendsThread{privateStringname;publicMyThread(Stringname){super();this

C 언어에서 static 키워드의 역할과 사용법에 대한 심층 분석 C 언어에서 static 키워드의 역할과 사용법에 대한 심층 분석 Feb 20, 2024 pm 04:30 PM

C 언어에서 static 키워드의 역할과 사용법에 대한 심층 분석 C 언어에서 static은 함수, 변수 및 데이터 유형을 정의하는 데 사용할 수 있는 매우 중요한 키워드입니다. static 키워드를 사용하면 객체의 링크 속성, 범위, 생명주기가 변경될 수 있습니다. C 언어에서 static 키워드의 역할과 사용법을 자세히 분석해 보겠습니다. 정적 변수 및 함수: 함수 내에서 static 키워드를 사용하여 정의된 변수를 전역 수명 주기를 갖는 정적 변수라고 합니다.

PHP에서 var 키워드의 역할과 예 PHP에서 var 키워드의 역할과 예 Jun 28, 2023 pm 08:58 PM

PHP에서 var 키워드의 역할과 예 PHP에서는 var 키워드를 사용하여 변수를 선언합니다. 이전 PHP 버전에서는 var 키워드를 사용하는 것이 멤버 변수를 선언하는 관용적인 방법이었지만 더 이상 사용이 권장되지 않습니다. 그러나 어떤 경우에는 var 키워드가 계속 사용됩니다. var 키워드는 주로 지역 변수를 선언하는 데 사용되며 해당 변수는 자동으로 지역 범위로 표시됩니다. 즉, 변수는 현재 코드 블록 내에서만 볼 수 있으며 다른 함수나 코드 블록에서는 액세스할 수 없습니다. var 사용

C언어에서는 go가 키워드인가요? 상세한 분석 C언어에서는 go가 키워드인가요? 상세한 분석 Mar 16, 2024 am 10:30 AM

제목: C언어에서는 go가 키워드인가요? 상세 분석 C 언어에서 "go"는 키워드가 아닙니다. C 언어의 키워드는 C 표준에 의해 지정되며 특정 문법 구조나 기능을 나타내는 데 사용됩니다. 이는 컴파일러에서 특별한 의미를 가지며 식별자나 변수 이름으로 사용할 수 없습니다. 예를 들어, 키워드 "int"는 정수 데이터 유형을 나타내고 "if"는 조건문을 나타내는 식입니다. "go"가 C 언어의 키워드인지 확인하려면 간단한 프로그램을 작성하여 테스트할 수 있습니다. 예는 다음과 같습니다: #inc

C 언어에는 몇 개의 키워드가 있습니까? C 언어에는 몇 개의 키워드가 있습니까? Nov 22, 2022 pm 03:39 PM

C 언어에는 32개의 키워드가 있습니다. 키워드의 기능에 따라 데이터 유형 키워드, 제어문 키워드, 저장 유형 키워드 및 기타 키워드의 네 가지 범주로 나눌 수 있습니다. char, double, float, int 등을 포함한 12개의 데이터 유형 키워드가 있습니다. for, break, if, else, do 등을 포함한 12개의 제어문 키워드가 있습니다. auto, static, extern 등 const, sizeof 등을 포함한 4개의 다른 키워드가 있습니다.

Thread는 Java에서 인터페이스를 어떻게 생성합니까? Thread는 Java에서 인터페이스를 어떻게 생성합니까? May 17, 2023 pm 12:49 PM

자바에서는 쓰레드에 있어서 쓰레드(Thread)가 필수적이다. 스레드는 프로세스보다 더 가벼운 예약 실행자입니다. 스레드를 사용하는 이유는 무엇입니까? 스레드를 사용하면 운영 체제 프로세스에서 리소스 할당과 실행 일정을 분리할 수 있습니다. 각 스레드는 프로세스 리소스(메모리 주소, 파일 I/O 등)를 공유할 수 있을 뿐만 아니라 독립적으로 예약할 수도 있습니다(스레드는 CPU 예약의 기본 단위입니다). 참고 1. Thread는 Thread를 만드는 데 가장 중요한 클래스이며, 단어 자체도 Thread를 나타냅니다. 2. Thread 클래스는 Runnable 인터페이스를 구현합니다. 인스턴스 publicclassThreadDemoextendsThread{publicvoidrun(){for(inti=0

PHP에서 확장 키워드의 역할과 사용법에 대한 자세한 설명 PHP에서 확장 키워드의 역할과 사용법에 대한 자세한 설명 Jun 28, 2023 pm 08:04 PM

PHP에서 확장 키워드의 역할과 사용법에 대한 자세한 설명 PHP 프로그래밍에서 확장은 클래스 상속을 구현하는 데 사용되는 매우 중요한 키워드입니다. 확장 키워드를 통해 하나 이상의 기존 클래스의 속성과 메서드를 상속할 수 있는 새 클래스를 만들 수 있습니다. 상속은 객체지향 프로그래밍에서 중요한 개념으로, 코드 재사용과 확장을 더욱 편리하고 유연하게 만들어줍니다. 이번 글에서는 extends 키워드의 기능과 사용법을 자세히 소개하겠습니다. 연장하다

Jul 24, 2023 pm 11:01 PM

Java의 Thread.start() 함수를 사용하여 새 스레드를 시작합니다. Java에서는 멀티스레딩을 사용하여 여러 작업을 동시에 실행할 수 있습니다. Java는 스레드를 생성하고 관리하기 위한 Thread 클래스를 제공합니다. Thread 클래스의 start() 함수는 새 스레드를 시작하고 스레드의 run() 메서드에 있는 코드를 실행하는 데 사용됩니다. 코드 예: publicclassMyThreadextendsThread{@Overr

See all articles