mysql的解析過程 解析mysql的開啟過程

2021-10-19 04:48:37 字數 2012 閱讀 5820

軟體安裝:裝機軟體必備包

sql是structured query language(結構化查詢語言)的縮寫。sql是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。sql功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支援sql。

有一天,兩個不懂mysql核心的人想去了解mysql核心**,兩個人不是去除錯**、查詢資料,而是在那邊思考。因為不了解核心,所以邊思考邊去驗證。

使用的mysql**是5.1.7,除錯環境是windows平台下的vs2003。

bingxi:「alex,你覺得mysql的啟動過程會是什麼樣的呢?我們以銀行為例吧。」

alex:「嗯,bingxi。早上銀行開門了,會先準備好環境,然後開門迎客,mysql也是這樣。mysql裡面會有乙個handle_connections_sockets函式,這個函式就好比是個叫號機,每個使用者來了都會取個號,然後就會進行業務處理。」pthread_handler_t handle_connections_sockets(void *arg attribute((unused)))

while (!abort_loop)

select((int) max_used_connection,&readfds,0,0,0) < 0) //有連線了則往下來執行,否則一直等待

accept(sock, my_reinterpret_cast(struct sockaddr *) (&caddr),&length) //接受請求

create_new_thread(thd);

//abort_loop=1,則執行到這裡進行推出。今天業務不處理了

bingxi:「啊,這裡面存在兩種可能的,1)使用者來乙個就分配乙個工作人員處理,2)將排號的人丟進工作佇列,根據叫號機到指定視窗獲取服務。前者的場景適合於請求量大,並且需要響應速度特別快的情況,但是分配也會有個限制,所謂的最大連線數,這樣的情況常見於網際網路行業,相應地我們可以看到機器的負載變化範圍特別大。同樣的,這也是它的乙個弊端,假設每個業務都複雜(消耗資源型sql語句),同時處理的話,機器會支撐不住,這時候第二種方法就比較好,這種情況屬於事務性場景。」

alex:「嗯,是的。mysql選擇的是前者,oracle提供兩種方法供選擇。我們繼續往下面的**看,如果我們配置了執行緒快取,且有可用的快取,則喚醒該執行緒,否則建立新的執行緒。」static void create_new_thread(thd *thd)

if (cached_thread_count > wake_thread)

start_cached_thread(thd);

else

if ((error=pthread_create(&thd->real_id,&connection_attrib,

handle_one_connection,

(void*) thd)))

bingxi:「嗯,老楊。是不是理解銀行為客戶分配了乙個服務人員,在這段期間一直為該客戶服務。裡面有個**段,是一直在等使用者下命令。但是有可能網路,或者被kill掉了,就像乙個人存了100,不斷取1塊錢一樣,被保安帶走了。」pthread_handler_t handle_one_connection(void *arg)

while (!net->error && net->vio != 0 &&

!(thd->killed == thd::kill_connection))

net->no_send_error= 0;

if (do_command(thd))

break;

alex:「嗯,獲取命令,然後執行命令。在dispatch_command函式中,根據不同的客戶請求進行響應的處理,比如開賬戶、存錢等」bool do_command(thd *thd)

if ((packet_length=my_net_read(net)) == packet_error) //獲取命令

dbug_return(dispatch_command(command,thd, packet+1, (uint) packet_length));

Mysql 儲存過程解析

儲存過程語法 create procedure sp name proc parameter characteristic.routine body 1 其中proc parameter的規定如下 proc parameter in out inout param name type in 表示當我...

Druid SQL 解析器的解析過程

這篇文嘗試近距離地 druid sql 解析器如何工作。以這份 為例 author beanlam date 2017年1月10日 下午11 06 26 version 1.0 public class parsermain 一開始,需要初始化乙個 parser,在這裡sqlstatementpar...

網域名稱解析過程 網域名稱解析過程

0x01相關資訊 閘道器 閘道器實質上是乙個網路通向其他網路的ip位址。要實現兩個網路之間的通訊,則必須通過閘道器。如果網路a中的主機發現資料報的目的主機不在本地網路中,就把資料報 給它自己的閘道器,自己的閘道器通過尋找路由指向,再由閘道器 給網路b的閘道器,網路b的閘道器再 給網路b的某個主機。i...