血案sql如下:
create table yw_wg_17 as
select distinct acc from yw_wc_cust_1715 a
where a.acc not in (select distinct acc from yw_wc_cust_17 b where a.acc=b.acc)
table yw_wc_cust_1715:
size 1.38 gb
num_rows 9,690,487
index none
table yw_wc_cust_17:
size 11.4 gb
num_rows 82,409,451
index none
血案現場:該sql的執行導致磁陣20塊硬碟滿負荷跑了十幾個小時沒跑完,監控軟體biubiubiu的推送告警資訊推送了一夜(沒有root許可權,所以放著沒管)。
第二天上班,問同事找來root許可權,iotop -p,好傢伙,兩個程序就幾乎把磁陣的io都耗光了,一看,我了乖乖全是oracle的,趕緊根據pid查sql,一查,如上,兩條幾乎一樣的sql在建表。
--通過系統pid查詢oracle中對應的sql語句
select s.sid, s.status, q.sql_text
from v$session s, v$sqltext q
where s.sql_hash_value = q.hash_value and s.sql_address = q.address and
s.sid in (select s.sid from v$session s, v$process p where s.paddr = p.addr and p.spid = '&pid' )
order by q.piece;
二話不說,優化sql,殺程序,跑優化後的sql,叮~~~兩分鐘不到搞定,嗯,燒水泡茶。
以下是優化後的sql:
create /*+ parallel(40) */ table ***x.yw_wg_17 nologging as
select /*+parallel(40)*/ a.acc from ***x.yw_wc_cust_1715 a
where not exists ( select /*+parallel(40)*/ 'x' from ***x.yw_wc_cust_17 b where a.acc=b.acc)
group by a.acc;
以下是執行結果:
MySQL中一條SQL語句的執行過程
查詢語句的執行順序 客戶端通過tcp連線傳送連線請求到mysql聯結器,聯結器會對該請求進行許可權驗證及連線資源分配 max connections,8小時超時 建立連線後客戶端傳送一條語句,mysql收到該語句後,通過命令分發器判斷其是否是一條select語句,如果是,在開啟查詢快取的情況下,先在...
mysql中,一條查詢sql的執行過程
作為乙個程式設計師,最不能避免的就是與sql打交道,那麼,在我們平時寫的那麼多sql它們是怎麼執行,並給我們返回資料的?比如最簡單的乙個查詢 select from user where id 10 sql簡單,但問題是你知道它是如何執行的嗎?先從整體看一下mysql資料庫的執行構造 1 serve...
一條clickhouse SQL語句引發的問題思考
前段時間在實際工作中,使用者的一條sql引發了我一些思考。寫一篇簡單的博文來記錄下。實際表的列名等已替換。select from db1.table1 as t1 left join db2.table2 as t2 on t1.col1 t2.col2 where t1.time 2020 01 ...