一、線程長時間處于killed狀態怎么辦
如果一個線程被標記為kill或query end,并且 InnoDB 引擎狀態報告同一線程的回滾,請等待它結束。它可能與從磁盤中刪除一些臨時表有關。一個ALTER TABLE可能需要丟棄非常大的臨時表,而某些文件系統(例如ext3或ext4)刪除大文件可能相當慢。
因此可能需要幾秒鐘甚至更長的時間。任何 DML 語句也可以創建臨時表,但通常不會那么大。
在最極端的情況下,刪除文件也不會超過十或二十秒,但在 I/O 負載較重的情況下,它可能會更長,所以有什么方法可以查看是否有臨時表是否被創造?在Percona Server或MariaDB中,您檢查INFORMATION_SCHEMA.GLOBAL_TEMPORARY_TABLE和INFORMATION_SCHEMA.TEMPORARY_TABLE的內容。它僅適用于使用CREATE TEMPORARY TABLE語句手動建立的臨時表,不適用于 MySQL 隱式創建的執行復雜查詢時的臨時表。
延伸閱讀:
二、行式數據庫與列式數據庫應用場景
行式更適合OLTP,比如傳統的基于增刪改查操作的應用。列式更適合OLAP,非常適合于在數據倉庫領域發揮作用,比如數據分析、海量存儲和商業智能;涉及不經常更新的數據。
由于設計上的不同,列式數據庫在并行查詢處理和壓縮上更有優勢。而且數據是以列為單元存儲,完全不用考慮數據建模或者說建模更簡單了。要查詢計算哪些列上的數據,直接讀取列就行。
最后我們需要務實的指出,沒有使用廣泛的數據庫,列式數據庫也并非使用廣泛,只不過給DBA提供了更多的選擇,DBA需根據自己的應用場景自行選擇。