mysql怎么查詢進(jìn)程 linux查看MySQL進(jìn)程

如何查mysql死鎖進(jìn)程

查詢死鎖進(jìn)程

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、廈門ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的廈門網(wǎng)站制作公司

采用如下存儲(chǔ)過(guò)程來(lái)查詢數(shù)據(jù)中當(dāng)前造成死鎖的進(jìn)程。

drop procedure sp_who_lock

go

CREATE procedure sp_who_lock

as

begin

declare @spid int

declare @blk int

declare @count int

declare @index int

declare @lock tinyint

set @lock=0

create table #temp_who_lock

(

id int identity(1,1),

spid int,

blk int

)

if @@error0 return @@error

insert into #temp_who_lock(spid,blk)

select 0 ,blocked

from (select * from master..sysprocesses where blocked0)a

where not exists(select * from master..sysprocesses where a.blocked =spid and blocked0)

union select spid,blocked from master..sysprocesses where blocked0

if @@error0 return @@error

select @count=count(*),@index=1 from #temp_who_lock

if @@error0 return @@error

if @count=0

begin

select '沒有阻塞和死鎖信息'

return 0

end

while @indexA href="mailto:=@count"=@count

begin

if exists(select 1 from #temp_who_lock a where id@index and exists(select 1 from #temp_who_lock where idA href="mailto:=@index"=@index and a.blk=spid))

begin

set @lock=1

select @spid=spid,@blk=blk from #temp_who_lock where id=@index

select '引起數(shù)據(jù)庫(kù)死鎖的是: '+ CAST(@spid AS VARCHAR(10)) + '進(jìn)程號(hào),其執(zhí)行的SQL語(yǔ)法如下'

select @spid, @blk

dbcc inputbuffer(@spid)

dbcc inputbuffer(@blk)

end

set @index=@index+1

end

if @lock=0

begin

set @index=1

while @indexA href="mailto:=@count"=@count

begin

select @spid=spid,@blk=blk from #temp_who_lock where id=@index

if @spid=0

select '引起阻塞的是:'+cast(@blk as varchar(10))+ '進(jìn)程號(hào),其執(zhí)行的SQL語(yǔ)法如下'

else

select '進(jìn)程號(hào)SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '進(jìn)程號(hào)SPID:'+ CAST(@blk AS VARCHAR(10)) +'阻塞,其當(dāng)前進(jìn)程執(zhí)行的SQL語(yǔ)法如下'

dbcc inputbuffer(@spid)

dbcc inputbuffer(@blk)

set @index=@index+1

end

end

drop table #temp_who_lock

return 0

end

GO

--執(zhí)行該存儲(chǔ)過(guò)程

exec sp_who_lock

補(bǔ)充:

一、產(chǎn)生死鎖的原因

在SQL Server中,阻塞更多的是產(chǎn)生于實(shí)現(xiàn)并發(fā)之間的隔離性。為了使得并發(fā)連接所做的操作之間的影響到達(dá)某一期望值而對(duì)資源人為的進(jìn)行加鎖(鎖本質(zhì)其實(shí)可以看作是一個(gè)標(biāo)志位)。當(dāng)一個(gè)連接對(duì)特定的資源進(jìn)行操作時(shí),另一個(gè)連接同時(shí)對(duì)同樣的資源進(jìn)行操作就會(huì)被阻塞,阻塞是死鎖產(chǎn)生的必要條件。

二、如何避免死鎖

1.使用事務(wù)時(shí),盡量縮短事務(wù)的邏輯處理過(guò)程,及早提交或回滾事務(wù);

2.設(shè)置死鎖超時(shí)參數(shù)為合理范圍,如:3分鐘-10分種;超過(guò)時(shí)間,自動(dòng)放棄本次操作,避免進(jìn)程懸掛;

3.優(yōu)化程序,檢查并避免死鎖現(xiàn)象出現(xiàn);

4.對(duì)所有的腳本和SP都要仔細(xì)測(cè)試,在正是版本之前;

5.所有的SP都要有錯(cuò)誤處理(通過(guò)@error);

6.一般不要修改SQL SERVER事務(wù)的默認(rèn)級(jí)別。不推薦強(qiáng)行加鎖。

三、處理死鎖

1、最簡(jiǎn)單的處理死鎖的方法就是重啟服務(wù)。

2、根據(jù)指定的死鎖進(jìn)程ID進(jìn)行處理

根據(jù)第二步查詢到的死鎖進(jìn)行,大致分析造成死鎖的原因,并通過(guò)如下語(yǔ)句釋放該死鎖進(jìn)程

kill pid --pid為查詢出來(lái)的死鎖進(jìn)程號(hào)

3、通過(guò)存儲(chǔ)過(guò)程殺掉某個(gè)庫(kù)下面的所有死鎖進(jìn)程和鎖

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[sp_killspid]

GO

create proc sp_killspid

@dbname varchar(200) --要關(guān)閉進(jìn)程的數(shù)據(jù)庫(kù)名

as

declare @sql nvarchar(500)

declare @spid nvarchar(20)

declare #tb cursor for

select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)

open #tb

fetch next from #tb into @spid

while @@fetch_status=0

begin

exec('kill '+@spid)

fetch next from #tb into @spid

end

close #tb

deallocate #tb

go

--使用方法,“db_name”為處理的數(shù)據(jù)庫(kù)名稱

exec sp_killspid 'db_name'

查詢mysql 哪些表正在被鎖狀態(tài)

1.查看表是否被鎖:

(1)直接在mysql命令行執(zhí)行:showengineinnodbstatus\G。

(2)查看造成死鎖的sql語(yǔ)句,分析索引情況,然后優(yōu)化sql。

(3)然后showprocesslist,查看造成死鎖占用時(shí)間長(zhǎng)的sql語(yǔ)句。

(4)showstatuslike‘%lock%。

2.查看表被鎖狀態(tài)和結(jié)束死鎖步驟:

(1)查看表被鎖狀態(tài):showOPENTABLESwhereIn_use0;這個(gè)語(yǔ)句記錄當(dāng)前鎖表狀態(tài)。

(2)查詢進(jìn)程:showprocesslist查詢表被鎖進(jìn)程;查詢到相應(yīng)進(jìn)程killid。

(3)分析鎖表的SQL:分析相應(yīng)SQL,給表加索引,常用字段加索引,表關(guān)聯(lián)字段加索引。

(4)查看正在鎖的事物:SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS。

(5)查看等待鎖的事物:SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCK_WAITS。

擴(kuò)展資料

MySQL鎖定狀態(tài)查看命令:

Checkingtable:正在檢查數(shù)據(jù)表(這是自動(dòng)的)。

Closingtables:正在將表中修改的數(shù)據(jù)刷新到磁盤中,同時(shí)正在關(guān)閉已經(jīng)用完的表。這是一個(gè)很快的操作,如果不是這樣的話,就應(yīng)該確認(rèn)磁盤空間是否已經(jīng)滿了或者磁盤是否正處于重負(fù)中。

ConnectOut:復(fù)制從服務(wù)器正在連接主服務(wù)器。

Copyingtotmptableondisk:由于臨時(shí)結(jié)果集大于tmp_table_size,正在將臨時(shí)表從內(nèi)存存儲(chǔ)轉(zhuǎn)為磁盤存儲(chǔ)以此節(jié)省內(nèi)存。

Creatingtmptable:正在創(chuàng)建臨時(shí)表以存放部分查詢結(jié)果。

deletingfrommaintable:服務(wù)器正在執(zhí)行多表刪除中的第一部分,剛刪除第一個(gè)表。

deletingfromreferencetables:服務(wù)器正在執(zhí)行多表刪除中的第二部分,正在刪除其他表的記錄。

Flushingtables:正在執(zhí)行FLUSHTABLES,等待其他線程關(guān)閉數(shù)據(jù)表。

Killed:發(fā)送了一個(gè)kill請(qǐng)求給某線程,那么這個(gè)線程將會(huì)檢查kill標(biāo)志位,同時(shí)會(huì)放棄下一個(gè)kill請(qǐng)求。MySQL會(huì)在每次的主循環(huán)中檢查kill標(biāo)志位,不過(guò)有些情況下該線程可能會(huì)過(guò)一小段才能死掉。如果該線程程被其他線程鎖住了,那么kill請(qǐng)求會(huì)在鎖釋放時(shí)馬上生效。

Locked:被其他查詢鎖住了。

Sendingdata:正在處理SELECT查詢的記錄,同時(shí)正在把結(jié)果發(fā)送給客戶端。

Sortingforgroup:正在為GROUPBY做排序。

Sortingfororder:正在為ORDERBY做排序。

Openingtables:這個(gè)過(guò)程應(yīng)該會(huì)很快,除非受到其他因素的干擾。例如,在執(zhí)ALTERTABLE或LOCKTABLE語(yǔ)句行完以前,數(shù)據(jù)表無(wú)法被其他線程打開。正嘗試打開一個(gè)表。

Removingduplicates:正在執(zhí)行一個(gè)SELECTDISTINCT方式的查詢,但是MySQL無(wú)法在前一個(gè)階段優(yōu)化掉那些重復(fù)的記錄。因此,MySQL需要再次去掉重復(fù)的記錄,然后再把結(jié)果發(fā)送給客戶端。

Reopentable:獲得了對(duì)一個(gè)表的鎖,但是必須在表結(jié)構(gòu)修改之后才能獲得這個(gè)鎖。已經(jīng)釋放鎖,關(guān)閉數(shù)據(jù)表,正嘗試重新打開數(shù)據(jù)表。

Repairbysorting:修復(fù)指令正在排序以創(chuàng)建索引。

Repairwithkeycache:修復(fù)指令正在利用索引緩存一個(gè)一個(gè)地創(chuàng)建新索引。它會(huì)比Repairbysorting慢些。

Searchingrowsforupdate:正在講符合條件的記錄找出來(lái)以備更新。它必須在UPDATE要修改相關(guān)的記錄之前就完成了。

Sleeping:正在等待客戶端發(fā)送新請(qǐng)求。

Systemlock:正在等待取得一個(gè)外部的系統(tǒng)鎖。如果當(dāng)前沒有運(yùn)行多個(gè)mysqld服務(wù)器同時(shí)請(qǐng)求同一個(gè)表,那么可以通過(guò)增加--skip-external-locking參數(shù)來(lái)禁止外部系統(tǒng)鎖。

Upgradinglock:INSERTDELAYED正在嘗試取得一個(gè)鎖表以插入新記錄。

Updating:正在搜索匹配的記錄,并且修改它們。

UserLock:正在等待GET_LOCK()。

Waitingfortables:該線程得到通知,數(shù)據(jù)表結(jié)構(gòu)已經(jīng)被修改了,需要重新打開數(shù)據(jù)表以取得新的結(jié)構(gòu)。然后,為了能的重新打開數(shù)據(jù)表,必須等到所有其他線程關(guān)閉這個(gè)表。

waitingforhandlerinsert:INSERTDELAYED已經(jīng)處理完了所有待處理的插入操作,正在等待新的請(qǐng)求。

mysql客戶端工具中,請(qǐng)問(wèn)如何查詢當(dāng)前所有的鏈接進(jìn)程信息

如果要查詢服務(wù)器上正在跑哪些查詢進(jìn)程,使用show processlist;

如果要查詢當(dāng)?shù)啬男┻M(jìn)程正在和mysql交互,可以使用操作系統(tǒng)自帶的netstat等工具查看mysql所在的IP和3306端口

如何查看Linux下mysql服務(wù)的進(jìn)程是否正常運(yùn)行?

ps

-ef|grep

mysql

可以看到是否有mysql進(jìn)程,如果有mysqld這行(一般會(huì)有2行以上)則表示正常運(yùn)行

也可以mysql

-u

root

-p登陸試試看能不能登陸

如果沒有啟動(dòng),service

mysqld

start啟動(dòng)下

mysql運(yùn)行很慢怎么查看哪個(gè)進(jìn)程占用

可以先使用 uptime 命令查看 CPU 平均負(fù)載

那個(gè) 2 users 表示用戶連接數(shù),指的是總連接數(shù)。

那個(gè) load average 就是系統(tǒng)平均負(fù)載,1 分鐘、5 分鐘、15 分鐘系統(tǒng)負(fù)載的平均值。

指的是一段時(shí)間內(nèi) CPU 正在處理以及等待 CPU 處理的進(jìn)程數(shù)之和的統(tǒng)計(jì)信息,也就是 CPU 使用隊(duì)列的長(zhǎng)度的統(tǒng)計(jì)信息。這個(gè)數(shù)字越小越好。

然后再用 vmstat 命令看下 CPU 是否飽和

這里面的 r 就是等待 CPU 的進(jìn)程數(shù),可以用來(lái)判定 CPU 是否飽和,當(dāng) r 值高于 CPU 數(shù)時(shí),就意味著飽和了。

查看mysql運(yùn)行狀態(tài)的命令是什么?

一、用phpMyAdmin進(jìn)行查看

二、用命令行的SHOW 語(yǔ)句

直接在命令行下登陸MySQL運(yùn)行SHOW STATUS;查詢語(yǔ)句

同樣的語(yǔ)句還有SHOW VARIABLES;,SHOW STATUS是查看MySQL運(yùn)行情況,和上面那種通過(guò)pma查看到的信息基本類似。

SHOW VARIABLES

SHOW VARIABLES是查看MySQL的配置參數(shù),還可以使用類似SHOW VARIABLES LIKE ‘Key%’

SHOW PROCESSLIST

SHOW PROCESSLIST是查看當(dāng)前正在進(jìn)行的進(jìn)程,對(duì)于有鎖表等情況的排查很有用處。一般情況下,打開MySQL的慢查詢記錄同樣有利于排查。

SHOW OPEN TABLES

SHOW OPEN TABLES是顯示當(dāng)前已經(jīng)被打開的表列表。

三、用MySQL自帶工具mysqladmin 查看

使用MySQL自帶的mysqladmin 工具查看status,使用以下命令

mysqladmin -uroot -p密碼 status

顯示的結(jié)果如下:

Uptime: 502963 Threads: 2 Questions: 8561820 Slow queries: 734681 Opens: 553

45 Flush tables: 1 Open tables: 85 Queries per second avg: 17.023

另外可以添加 -i 5 參數(shù),讓其每五秒自動(dòng)刷新之。

mysqladmin -uroot -p密碼 status -i 5

mysqladmin extended-status

同樣的可以使用mysqladmin -uroot -p密碼 extended-status來(lái)查看更多的MySQL運(yùn)行信息,這種方式和第一種查看的信息基本一樣。

網(wǎng)站標(biāo)題:mysql怎么查詢進(jìn)程 linux查看MySQL進(jìn)程
文章URL:http://muchs.cn/article6/dooojig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站營(yíng)銷虛擬主機(jī)、面包屑導(dǎo)航、小程序開發(fā)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化