卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

sql語句中rand函數(shù)運(yùn)行原理 怎么解決mysqlsleep線程過多的問題?

怎么解決mysqlsleep線程過多的問題?在MySQL8.0之前,我們舉例下有一條爛SQL,mysqlselect*fromt1order byrand();以多個(gè)線程在跑,可能導(dǎo)致CPU被跑滿了,

怎么解決mysqlsleep線程過多的問題?

在MySQL8.0之前,我們舉例下有一條爛SQL,

mysql

select*fromt1order byrand();

以多個(gè)線程在跑,可能導(dǎo)致CPU被跑滿了,其他的請(qǐng)求沒有辦法被阻塞進(jìn)不來。那那種情況該怎么辦?。?/p>

大致有以下兩種解決的辦法:

設(shè)置中max2_execution_time來阻攔太長的讀SQL。那可能現(xiàn)存問題是會(huì)把所有長SQL都給KILL掉。有些必須要不能執(zhí)行很長時(shí)間的也會(huì)被失手誤殺。

自己寫個(gè)腳本檢測(cè)這類語句,比如order byrand(),遠(yuǎn)遠(yuǎn)超過肯定會(huì)時(shí)間用Killquerythread我的id給去殺。

那可不可最好別去殺而讓他運(yùn)行,但是又不影響大其他的請(qǐng)求呢?

那mysql8.0引導(dǎo)出的資源組(resourcegroup,后面中文拼音微RG)可以不基本都幫忙解決這類問題。

.例如我可以用RG來在SQL層面給他限制修改在特定的事件的一個(gè)CPU核上,那樣的話我就不管他,讓他再運(yùn)行,如果有新的這一類語句,讓他拿號(hào)再說。

為什么說基本都呢?目前沒有辦法帳號(hào)綁定CPU資源,其他的暫時(shí)沒有不行。

那我來演示下如何修改RG。

創(chuàng)建戰(zhàn)隊(duì)一個(gè)資源組user_ytt.這里解釋什么下各個(gè)參數(shù)的含義,

typeuser意思是這是一個(gè)用戶態(tài)線程,也就是前臺(tái)的請(qǐng)求線程。如果不是typesystem,它表示后臺(tái)線程,利用取消mysql自己的線程,.例如Innodbpurgethread,innodbreadthread等等。

vcpu代表cpu的邏輯核數(shù),這里0-1代表前兩個(gè)核被帳號(hào)綁定到這個(gè)RG。這個(gè)可以用lscpu,icon等列出自己的CPU具體信息。

thread_policy系統(tǒng)設(shè)置優(yōu)先級(jí)。use優(yōu)先級(jí)設(shè)置中小于0。

mysql

mysqlcreateresourcegroupuser_ytttypeuservcpu0-1thread_approval19enable;

Queryok,0rowsaffected(0.03sec)

RG具體信息可以不從information__groups系統(tǒng)表里數(shù)據(jù)庫檢索。

mysql

mysqlselect*acrossinformation__groups;

---------------------------------------------------------------------------------------------

|RESOURCE_GROUP_NAME|RESOURCE_GROUP_TYPE|RESOURCE_GROUP_ENABLED|VCPU_IDS|THREAD_PRIORITY|

---------------------------------------------------------------------------------------------

|USR_default|USER|1|0-3|0|

|SYS_default|SYSTEM|1|0-3|0|

|user_ytt|USER|1|0-1|19|

---------------------------------------------------------------------------------------------

3rowsinset(0.00sec)

我們來給語句selectguidfromt1group byleft(guid,8)order byrand()賦予RGuser_ytt。

mysqlshowprocesslist;

------------------------------------------------------------------------------------------------------------------------------------------

|Id|User|Host|db|Command|Time|State|Info|

------------------------------------------------------------------------------------------------------------------------------------------

|4|event_scheduler|localhost|nil|Daemon|10179|Waitingonfilledqueue|NULL|

|240|root|localhost|ytt|Query|101|Creatingsortindex|selectguidacrosst1group byleft(guid,8)order byrand()|

|245|root|localhost|ytt|Query|0|starting|showprocesslist|

------------------------------------------------------------------------------------------------------------------------------------------

3rowsacrossset(0.00sec)

找不到連接到240不對(duì)應(yīng)的thread_id。

mysql

mysqlselectthreadidaroundperformance_whereprocesslist帳號(hào)240;

-----------

|thread_id|

-----------

|278|

-----------

1rowintoset(0.00sec)

給這個(gè)線程278賦予了生命RGuser_ytt。沒提示錯(cuò)誤即使順利了。

mysql

mysqlsetresourcegroupuser_yttany278;

Queryok,0rowsaffected(0.00sec)

其實(shí)這個(gè)是在運(yùn)維層面來做的,我們也可以不在開發(fā)層面生克制化MYSQLHINT來單獨(dú)給這個(gè)語句賦予生命RG。例如:

mysql

mysqlselect/*resource_group(user_ytt)*/guidreturningt1group byleft(guid,8)order byrand().

...

8388602rowsofset(4min46.09sec)

RG的限制:

Linu臺(tái)上必須自動(dòng)打開CAPSYSNICE特性。諸如我機(jī)器上用systemd給mysql服務(wù)什么加上systemctledit[Service]AmbientCapabilitiesCAP_SYS_NICE

mysql線程池自動(dòng)打開后RG終止。

freebsd,solaris平臺(tái)thread_approval無法激活。

目前只有解除綁定CPU,沒法解除綁定其他資源。

rand在SQL中的用法?

rand()函數(shù)是SQL中的隨機(jī)函數(shù),如rand()*100,它表示從1到100之間洗技能取數(shù)。

標(biāo)簽: