最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MYSQL查詢結(jié)果實(shí)現(xiàn)發(fā)送給客戶端

 更新時(shí)間:2025年06月11日 11:11:40   作者:Dennis_nafla  
這篇文章主要介紹了MYSQL查詢結(jié)果實(shí)現(xiàn)發(fā)送給客戶端方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MYSQL取數(shù)據(jù)和發(fā)數(shù)據(jù)的流程(邊讀邊發(fā))

  • 1.服務(wù)端,獲取一行數(shù)據(jù),存到net_buffer中,可以理解為結(jié)果集
  • 2.繼續(xù)讀取數(shù)據(jù),直到net_buffer寫滿,調(diào)用網(wǎng)絡(luò)接口發(fā)出去
  • 3.如果發(fā)送成功,就清空net_buffer
  • 4.如果發(fā)送失敗,就說(shuō)明socket send buffer 寫滿了,進(jìn)入等待,直到有足夠的空間可寫,再繼續(xù)發(fā)送。

注意net_buffer滿了就發(fā)給客戶端而不是等查詢語(yǔ)句查詢完所有數(shù)據(jù)才發(fā),其中net_buffer默認(rèn)大小是16k,所以服務(wù)器占用內(nèi)存最多是16k,不會(huì)因?yàn)椴樵?00G的數(shù)據(jù)導(dǎo)致內(nèi)存爆掉。

如果客戶端接收數(shù)據(jù)太慢,就會(huì)導(dǎo)致數(shù)據(jù)在socket send buffer 堆積,導(dǎo)致發(fā)送數(shù)據(jù)到客戶端的線程進(jìn)入等待,由于net_buffer數(shù)據(jù)沒(méi)有發(fā)送出去,net_buffer一直沒(méi)法清空,查詢語(yǔ)句就要等待net_buffer清空才能繼續(xù)執(zhí)行,導(dǎo)致服務(wù)端查詢速度變慢。

Sending to client

假設(shè)使用show processlist發(fā)現(xiàn)一條語(yǔ)句的state是“Sending to client”,就是上面說(shuō)的在等待socket send buffer 有足夠空間可以將net_buffer中的數(shù)據(jù)寫進(jìn)去發(fā)送給客戶端。

Sending Data

一個(gè)查詢語(yǔ)句的狀態(tài)是這樣的:

  • 1.首先將語(yǔ)句狀態(tài)寫成Sending Data
  • 2.將查詢需要的列信息發(fā)送給客戶端
  • 3.繼續(xù)執(zhí)行查詢
  • 4.完成查詢,將狀態(tài)寫成空

但是MYSQL8好像改了,我看到的是executing

LRU(Least Recently Used )算法

最近最少使用算法是一種內(nèi)存淘汰機(jī)制,核心是--內(nèi)存空間不足時(shí),將最少使用的數(shù)據(jù)頁(yè)淘汰

innodb管理Buffer Pool 的LRU算法,是通過(guò)鏈表來(lái)實(shí)現(xiàn)的,每個(gè)鏈表節(jié)點(diǎn)就是一個(gè)數(shù)據(jù)頁(yè)。

  • 1.鏈表中任意一個(gè)數(shù)據(jù)頁(yè)被訪問(wèn)到時(shí),就將這個(gè)節(jié)點(diǎn)放在鏈表的頭節(jié)點(diǎn)
  • 2.當(dāng)訪問(wèn)一個(gè)鏈表中沒(méi)有的數(shù)據(jù)頁(yè),需要加載到BufferPool并且放在頭節(jié)點(diǎn)
  • 3.當(dāng)新節(jié)點(diǎn)要進(jìn)來(lái)時(shí),如果鏈表空間不足了,就把鏈表尾節(jié)點(diǎn)從鏈表中刪除。

但是這個(gè)LRU在某些場(chǎng)景時(shí)有很大問(wèn)題的

比如一個(gè)語(yǔ)句查詢了歷史數(shù)據(jù)表(非業(yè)務(wù)熱點(diǎn)數(shù)據(jù)表)的所有數(shù)據(jù),這就會(huì)把鏈表中之前維護(hù)的熱點(diǎn)數(shù)據(jù)頁(yè)都淘汰掉,留下一些非業(yè)務(wù)熱點(diǎn)數(shù)據(jù)頁(yè),會(huì)導(dǎo)致緩存命中率急劇降低,磁盤IO壓力倍增。

針對(duì)這種清空,Innodb對(duì)LRU算法進(jìn)行了優(yōu)化

就是對(duì)鏈表進(jìn)行了分區(qū),前5/8是young區(qū),后3/8是old區(qū)。

  • 1.如果young的數(shù)據(jù)頁(yè)被訪問(wèn)到了,和普通LRU算法一樣,移到鏈表頭部。
  • 2.如果鏈表空間滿了,此時(shí)有個(gè)新的數(shù)據(jù)頁(yè)要加進(jìn)來(lái),和普通LRU算法一樣首先把鏈表尾部的數(shù)據(jù)頁(yè)淘汰,不過(guò)這個(gè)新的數(shù)據(jù)頁(yè)不是放在鏈表頭部,而是放在old區(qū)的第一個(gè)位置。
  • 3.對(duì)于old區(qū)的數(shù)據(jù)頁(yè),每次訪問(wèn)都要進(jìn)行判斷:

如果該數(shù)據(jù)頁(yè)在old待的時(shí)間大于1秒,就移動(dòng)到整個(gè)鏈表的頭節(jié)點(diǎn)。

如果小于1秒,就不改變位置。

這個(gè)1秒是由innodb_old_blocks_time參數(shù)控制的。

這樣一來(lái),短時(shí)間內(nèi)的非熱點(diǎn)數(shù)據(jù)只會(huì)存在于old區(qū),一段時(shí)間內(nèi)不被訪問(wèn)就慢慢掉到尾部被淘汰了,不會(huì)影響到真正的熱點(diǎn)數(shù)據(jù),它們會(huì)一直在young區(qū)。保證了不影響正常業(yè)務(wù)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mysql數(shù)據(jù)庫(kù)中數(shù)字相減 出現(xiàn)負(fù)數(shù)時(shí)sql 語(yǔ)句報(bào)錯(cuò)的問(wèn)題

    Mysql數(shù)據(jù)庫(kù)中數(shù)字相減 出現(xiàn)負(fù)數(shù)時(shí)sql 語(yǔ)句報(bào)錯(cuò)的問(wèn)題

    這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)中數(shù)字相減 出現(xiàn)負(fù)數(shù)時(shí)sql 語(yǔ)句報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析

    MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析

    這篇文章主要介紹了MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析,并且簡(jiǎn)單介紹了updatexml函數(shù),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • MYSQL輸入密碼后閃退現(xiàn)象的解決方法

    MYSQL輸入密碼后閃退現(xiàn)象的解決方法

    最近在啟動(dòng)MySQL服務(wù)端并輸入密后,出現(xiàn)閃退現(xiàn)象,實(shí)際上這種問(wèn)題很常見(jiàn),下面這篇文章主要給大家介紹了關(guān)于MYSQL輸入密碼后閃退現(xiàn)象的解決方法,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • MySQL如何查看某個(gè)表所占空間大小

    MySQL如何查看某個(gè)表所占空間大小

    在MySQL數(shù)據(jù)庫(kù)管理和優(yōu)化中,了解表所占用的空間大小是非常重要的,本文為大家整理了多種查看MySQL表空間大小的方法,需要的可以參考一下
    2025-05-05
  • MySQL觸發(fā)器之判斷更新操作前后數(shù)據(jù)是否改變

    MySQL觸發(fā)器之判斷更新操作前后數(shù)據(jù)是否改變

    這篇文章主要介紹了MySQL觸發(fā)器之判斷更新操作前后數(shù)據(jù)是否改變方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Mysql 5.7從節(jié)點(diǎn)配置多線程主從復(fù)制的方法詳解

    Mysql 5.7從節(jié)點(diǎn)配置多線程主從復(fù)制的方法詳解

    這篇文章主要介紹了Mysql 5.7從節(jié)點(diǎn)配置多線程主從復(fù)制的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • 查詢MySQL中的樹(shù)型表兩種方法

    查詢MySQL中的樹(shù)型表兩種方法

    在 MySQL中查詢樹(shù)型表(即具有層級(jí)結(jié)構(gòu)的表)可以使用遞歸查詢或者使用嵌套集模型,下面介紹兩種方法查詢MySQL中的樹(shù)型表,感興趣的朋友一起看看吧
    2024-01-01
  • MySQL建表(create?table)命令解讀

    MySQL建表(create?table)命令解讀

    這篇文章主要介紹了MySQL建表(create?table)命令的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • sysbench的安裝與使用 分享

    sysbench的安裝與使用 分享

    sysbench是一款開(kāi)源的多線程性能測(cè)試工具,可以執(zhí)行CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫(kù)等方面的性能測(cè)試。數(shù)據(jù)庫(kù)目前支持MySQL/Oracle/PostgreSQL
    2013-09-09
  • MySQL的savepoint簡(jiǎn)介及實(shí)例

    MySQL的savepoint簡(jiǎn)介及實(shí)例

    MySQL中的保存點(diǎn)Savepoint是一個(gè)用于控制事務(wù)的重要工具,本文主要介紹了MySQL的savepoint簡(jiǎn)介及實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08

最新評(píng)論

库伦旗| 高阳县| 祥云县| 大姚县| 泰宁县| 贡山| 博爱县| 闻喜县| 靖边县| 平度市| 武川县| 兰考县| 育儿| 潮州市| 平阳县| 大悟县| 长武县| 淮安市| 徐闻县| 正蓝旗| 韶山市| 北流市| 班玛县| 法库县| 漳平市| 江达县| 长阳| 衡水市| 石城县| 湄潭县| 富源县| 巴塘县| 兴隆县| 东宁县| 长宁区| 蛟河市| 抚宁县| 房山区| 读书| 宿迁市| 忻州市|