原创 MySQL查詢何時會被阻塞

MySQL查詢何時會被阻塞 由於沒有拿到MDL讀鎖   可以通過show processlist命令查看線程狀態爲:Waiting for table metadata lock,這時需要找到鎖住這個表的線程,通過select

原创 MySQL日誌與索引QA

  首先再明確一下MySQL的兩階段提交過程,如下圖所示:   如果在時刻1 數據庫宕機,則將事務回滾   如果在時刻2 數據庫宕機,則如果binlog 已經完整寫好,則提交事務;否則回滾事務。   Binlog存在固定的完整格式

原创 MySQL中如何優雅的隨機取出數據

MySQL中如何優雅的隨機取出數據方法一方法二參考文獻   很多時候可能會涉及到隨機從數據表中取出幾條記錄,例如單詞APP鎖屏顯示單詞這種,這個功能的實現方法有很多 方法一   通過MySQL的order by rand()來實現

原创 MySQL order by工作機制

  當使用order by對查詢結果進行排序時,MySQL會給每個線程分配一塊兒內存sort_buffer用於排序,在使用索引的情況下,整個的排序過程如下所述:   1. 初始化sort_buffer,確定放入結果中所需的字段;

原创 MySQL抖動原因分析

MySQL抖動原因分析數據庫抖動定義InnoDB刷髒頁控制策略參考文獻 數據庫抖動定義   一條SQL語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短,

原创 MySQL count(*)詳解

MySQL count(*)詳解count實現原理不同count的性能區別參考文獻 count實現原理   與其他的功能類似,count(*)的實現方式也與MySQL存儲引擎緊密相關,MyISAM引擎把一個表的總行數存在了磁盤上,

原创 MySQL表空間回收

MySQL表空間回收表空間分析數據刪除流程online與inplace的區別optimize table、analyze table和alter table這三種方式重建表的區別參考文獻 表空間分析   表刪掉了一半的數據,表文件

原创 MySQL行鎖及其性能優化

MySQL行鎖及其性能優化行鎖死鎖與死鎖檢測參考文獻 行鎖   行鎖針對數據表中行記錄的鎖,需要存儲引擎支持,MyISAM不支持,InooDB支持, 在InnoDB事務中,行鎖在需要時才加上,但並不是不需要了就立刻釋放,而是要等到

原创 MySQL全局鎖和表鎖

MySQL全局鎖和表鎖全局鎖表鎖參考文獻 全局鎖   對整個數據庫加鎖,語句爲:Flush tables with read lock (FTWRL),加鎖之後不可以進行增刪改,也不能做DDL,是一個整庫只讀的狀態,一般只有在做全

原创 MySQL普通索引與唯一索引

MySQL普通索引與唯一索引查詢語句性能分析更新語句性能分析change buffer總結參考文獻   當我們需要在一個唯一字段上建立索引時,究竟是建立普通索引還是唯一索引的性能更好呢?這時需要從兩個角度考慮 查詢語句性能分析  

原创 MySQL索引選擇問題

  在進行數據查詢的時候,MySQL優化器會自動爲查詢語句選擇合適的索引,索引選擇的正確與否對MySQL的執行速度有很大影響。使用explain語句可以查詢得到執行計劃的詳細內容,而優化器選擇索引的目的,是找到一個最優的執行方案,

原创 MySQL MVCC機制詳解

MySQL MVCC機制詳解MVCC分析參考文獻 MVCC分析   MySQL默認的事務隔離級別是可重複讀,在事務開始時獲得一致性視圖,但更新數據時需要拿到行鎖,如果與其他事務出現衝突需要進行等待,等待後獲得鎖再進行更新操作時讀到

原创 賽碼解題報告(五)

攔截導彈 題目描述 某國進行軍事演戲,研發一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於等於前一發的高度。某天,雷達捕捉到敵國導彈來襲。由於該系統還在試

原创 Redis 的設計與實現——(七)Redis持久化機制

RDB持久化        由於Redis是內存數據庫,所以當數據庫down的時候,所有數據都會丟失,爲了防止數據的丟失,我們採用RDB將數據庫狀態保存爲文件。首先生成RDB文件的命令有兩個:SAVE 和 BGSAVE        SA

原创 Redis 的設計與實現——之(六)Redis數據庫的實現與過期機制

Redis服務器的數據庫實現~ redisServer 在啓動的時候默認啓動16個數據庫,每個redisClient有自己連接的db,記錄在redisClient的db屬性裏,客戶端可以切換自己鏈接的db. 不難理解,其實每個db都有一個