欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

執(zhí)行計劃的存儲方法、裝置及系統(tǒng)的制作方法

文檔序號:6516520閱讀:216來源:國知局
執(zhí)行計劃的存儲方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實施例公開了一種執(zhí)行計劃的存儲方法、裝置及系統(tǒng),涉及數(shù)據(jù)庫領域,可以提高執(zhí)行計劃的緩存命中率,減少系統(tǒng)開銷。所述方法包括:客戶端將SQL請求及生成的位置信息發(fā)送給數(shù)據(jù)庫服務器,數(shù)據(jù)庫服務器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí)行SQL請求對應的執(zhí)行計劃,并且將該執(zhí)行計劃保存至位置信息指示的緩存中。本發(fā)明實施例適用于在客戶端或數(shù)據(jù)庫服務器的緩存中保存SQL請求對應的執(zhí)行計劃。
【專利說明】執(zhí)行計劃的存儲方法、裝置及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)庫領域,特別涉及一種執(zhí)行計劃的存儲方法、裝置及系統(tǒng)。
【背景技術】
[0002]數(shù)據(jù)庫中的執(zhí)行計劃是指對SQL(Structured query language,結構化查詢語言) 請求的執(zhí)行過程的描述。數(shù)據(jù)庫服務器每次執(zhí)行客戶端發(fā)起的SQL請求時,都需要對SQL 請求進行解析并生成對應的執(zhí)行計劃,并將執(zhí)行計劃保存在數(shù)據(jù)庫服務器的內存中。目前 數(shù)據(jù)庫服務器在進行執(zhí)行計劃的保存時,會針對不同的客戶端分別配置緩存區(qū),以保存不 同的客戶端對應的執(zhí)行計劃。
[0003]然而通過目前這種執(zhí)行計劃的存儲方式進行執(zhí)行計劃保存時,數(shù)據(jù)庫服務器為不 同的客戶端分別配置緩存區(qū)。由于當客戶端所分配的緩存區(qū)飽和后,利用率低的執(zhí)行計劃 所占用的緩存會被釋放,以使得該客戶端利用率高的執(zhí)行計劃緩存在所分配的緩存區(qū)中, 即上述利用率低的執(zhí)行計劃無法被保存在緩存中,當客戶端再次發(fā)起該SQL請求時,數(shù)據(jù) 庫服務器需要重新解析該SQL請求并生成對應的執(zhí)行計劃,從而造成執(zhí)行計劃的緩存命中 率較低,增加了系統(tǒng)開銷。

【發(fā)明內容】

[0004]本發(fā)明實施例提供一種執(zhí)行計劃的存儲方法、裝置及系統(tǒng),可以提高執(zhí)行計劃的 緩存命中率,減少系統(tǒng)開銷。第一方面,本發(fā)明實施例提供一種執(zhí)行計劃的存儲方法,包 括:
[0005]客戶端接收結構化查詢語言SQL請求;
[0006]所述客戶端檢測在所述客戶端的緩存中是否存在所述SQL請求對應的執(zhí)行計劃;
[0007]若所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃,所述客戶端生成位 置信息,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位 置為所述客戶端的緩存和/或數(shù)據(jù)庫服務器的緩存;
[0008]所述客戶端將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器,以使得所 述數(shù)據(jù)庫服務器生成所述SQL請求對應的執(zhí)行計劃,并將所述執(zhí)行計劃保存到所述位置信 息指示的緩存中。
[0009]在第一方面的第一種實現(xiàn)方式中,還包括:
[0010]若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述客戶端將所述執(zhí) 行計劃發(fā)送給所述數(shù)據(jù)庫服務器,以使得所述數(shù)據(jù)庫服務器執(zhí)行所述執(zhí)行計劃。
[0011]結合第一方面或者第一方面的第一種實現(xiàn)方式,在第一方面的第二種實現(xiàn)方式 中,所述若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述客戶端將所述執(zhí) 行計劃發(fā)送給所述數(shù)據(jù)庫服務器,以使得所述數(shù)據(jù)庫服務器執(zhí)行所述執(zhí)行計劃,具體包 括:
[0012]若所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃,則所述客戶端從所述多個執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
[0013]結合第一方面或者第一方面的第一種實現(xiàn)方式,或者第一方面的第二種實現(xiàn)方 式,在第一方面的第三種實現(xiàn)方式中,在所述客戶端將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服 務器之前,所述方法還包括:
[0014]所述客戶端通過圖形化界面顯示所述執(zhí)行計劃的參數(shù)信息;
[0015]所述客戶端根據(jù)參數(shù)信息修改指令調整所述執(zhí)行計劃的參數(shù)信息,并將調整后的 執(zhí)行計劃保存在所述客戶端的緩存中;
[0016]所述客戶端將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器的步驟包括:
[0017]所述客戶端將所述調整后的執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
[0018]結合第一方面或者第一方面的第一種實現(xiàn)方式,或者第一方面的第二種實現(xiàn)方 式,或者第一方面的第三種實現(xiàn)方式,在第一方面的第四種實現(xiàn)方式中,在所述客戶端將所 述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器之后,所述方法還包括:
[0019]若所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存,所述客戶端 接收所述數(shù)據(jù)庫服務器發(fā)送的所述SQL請求對應的執(zhí)行計劃,并保存在所述客戶端的緩存 中。
[0020]結合第一方面或者第一方面的第一種實現(xiàn)方式,或者第一方面的第二種實現(xiàn)方 式,或者第一方面的第三種實現(xiàn)方式,或者第一方面的第四種實現(xiàn)方式,在第一方面的第五 種實現(xiàn)方式中,所述若所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃,所述客 戶端生成位置信息,具體包括:
[0021]若所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃,所述客戶端根據(jù)所 述SQL請求,進行哈希運算生成所述位置信息。第二方面,本發(fā)明實施例提供一種執(zhí)行計劃 的存儲裝置,包括:
[0022]接收單元,用于接收結構化查詢語言SQL請求;
[0023]檢測單元,用于檢測在所述客戶端的緩存中是否存在所述接收單元接收的所述 SQL請求對應的執(zhí)行計劃;
[0024]生成單元,用于當所述客戶端的緩存中不存在所述檢測單元檢測的所述SQL請求 對應的執(zhí)行計劃時,生成位置信息,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計 劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務器的緩存;
[0025]發(fā)送單元,用于將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器。
[0026]在第二方面的第一種實現(xiàn)方式中,所述發(fā)送單元,還用于當所述客戶端的緩存中 存在所述SQL請求對應的執(zhí)行計劃時,將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器,以使得 所述數(shù)據(jù)庫服務器執(zhí)行所述執(zhí)行計劃。
[0027]結合第二方面或者第二方面的第一種實現(xiàn)方式,在第二方面的第二種實現(xiàn)方式 中,所述發(fā)送單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃 時,則從所述多個執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
[0028]結合第二方面或者第二方面的第一種實現(xiàn)方式,或者第二方面的第二種實現(xiàn)方 式,在第二方面的第三種實現(xiàn)方式中,還包括:
[0029]顯示單元,用于通過圖形化界面顯示所述檢測單元檢測到的所述執(zhí)行計劃的參數(shù)
信息;[0030]調整單元,用于根據(jù)參數(shù)信息修改指令調整所述顯示單元顯示的所述執(zhí)行計劃的 參數(shù)信息;
[0031]保存單元,用于將調整后的執(zhí)行計劃保存在所述客戶端的緩存中;
[0032]所述發(fā)送單元,還用于將所述調整單元調整后的執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務 器。
[0033]結合第二方面或者第二方面的第一種實現(xiàn)方式,或者第二方面的第二種實現(xiàn)方 式,或者第二方面的第三種實現(xiàn)方式,在第二方面的第四種實現(xiàn)方式中,
[0034]所述接收單元,還用于當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶 端的緩存時,接收所述數(shù)據(jù)庫服務器發(fā)送的所述SQL請求對應的執(zhí)行計劃;
[0035]所述保存單元,還用于將所述接收單元接收的所述執(zhí)行計劃保存在所述客戶端的 緩存中。
[0036]結合第二方面或者第二方面的第一種實現(xiàn)方式,或者第二方面的第二種實現(xiàn)方 式,或者第二方面的第三種實現(xiàn)方式,或者第二方面的第四種實現(xiàn)方式,在第二方面的第五 種實現(xiàn)方式中,
[0037]所述生成單元,還用于當所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計 劃時,根據(jù)所述SQL請求,進行哈希運算生成所述位置信息。
[0038]第三方面,本發(fā)明實施例提供一種執(zhí)行計劃的存儲方法,包括:
[0039]數(shù)據(jù)庫服務器接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求,所述位置 信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為客戶端的緩存 和/或數(shù)據(jù)庫服務器的緩存;
[0040]所述數(shù)據(jù)庫服務器獲取所述SQL請求對應的執(zhí)行計劃;
[0041 ] 所述數(shù)據(jù)庫服務器根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置;
[0042]若所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存,所述數(shù)據(jù)庫 服務器將所述執(zhí)行計劃發(fā)送給所述客戶端進行保存。
[0043]在第三方面的第一種實現(xiàn)方式中,在所述數(shù)據(jù)庫服務器接收客戶端發(fā)送的位置信 息及結構化查詢語言SQL請求之前,所述方法還包括:
[0044]若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述數(shù)據(jù)庫服務器接 收所述客戶端發(fā)送的所述執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃。
[0045]結合第三方面或者第三方面的第一種實現(xiàn)方式,在第三方面的第二種實現(xiàn)方式 中,所述若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述數(shù)據(jù)庫服務器接 收所述客戶端發(fā)送的所述執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃,具體包括:
[0046]若所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃,所述數(shù)據(jù)庫服務 器接收所述客戶端發(fā)送的從所述多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃,并且執(zhí)行所述 執(zhí)行計劃。
[0047]結合第三方面或者第三方面的第一種實現(xiàn)方式,或者第三方面的第二種實現(xiàn)方 式,在第三方面的第三種實現(xiàn)方式中,所述若所述客戶端的緩存中存在所述SQL請求對應 的執(zhí)行計劃,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的所述執(zhí)行計劃,并且執(zhí)行所述執(zhí)行 計劃,具體包括:
[0048]若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計劃進行參數(shù)調整,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的調整 后的執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃。
[0049]結合第三方面或者第三方面的第一種實現(xiàn)方式,或者第三方面的第二種實現(xiàn)方 式,或者第三方面的第三種實現(xiàn)方式,在第三方面的第四種實現(xiàn)方式中,在所述數(shù)據(jù)庫服務 器根據(jù)所述指定信息獲取所述執(zhí)行計劃的緩存位置之后,所述方法還包括:
[0050]若所述位置信息指定所述執(zhí)行計劃的緩存位置為所述數(shù)據(jù)庫服務器的緩存,所述 數(shù)據(jù)庫服務器將所述執(zhí)行計劃保存在所述數(shù)據(jù)庫服務器的緩存中。
[0051]第四方面,本發(fā)明實施例提供一種執(zhí)行計劃的存儲裝置,包括:
[0052]接收單元,用于接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求,所述位 置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為客戶端的緩 存和/或數(shù)據(jù)庫服務器的緩存;
[0053]獲取單元,用于根據(jù)所述接收單元接收的所述SQL請求,獲取所述SQL請求對應的 執(zhí)行計劃;
[0054]所述獲取單元,還用于根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置;
[0055]發(fā)送單元,用于當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩 存時,所述數(shù)據(jù)庫服務器將所述執(zhí)行計劃發(fā)送給所述客戶端進行保存。
[0056]在第四方面的第一種實現(xiàn)方式中,所述接收單元,還用于當所述客戶端的緩存中 存在所述SQL請求對應的執(zhí)行計劃時,接收所述客戶端發(fā)送的所述執(zhí)行計劃;
[0057]所述裝置還包括:
[0058]執(zhí)行單元,用于執(zhí)行所述接收單元接收的所述執(zhí)行計劃。
[0059]結合第四方面或者第四方面的第一種實現(xiàn)方式,在第四方面的第二種實現(xiàn)方式 中,所述接收單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃 時,接收所述客戶端發(fā)送的從所述多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃;
[0060]所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述任意一個執(zhí)行計劃。
[0061]結合第四方面或者第四方面的第一種實現(xiàn)方式,或者第四方面的第二種實現(xiàn)方 式,在第四方面的第三種實現(xiàn)方式中,所述接收單元,還用于當所述客戶端的緩存中存在所 述SQL請求對應的執(zhí)行計劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計劃進行參數(shù)調 整時,接收所述客戶端發(fā)送的調整后的執(zhí)行計劃;
[0062]所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述調整后的執(zhí)行計劃。
[0063]結合第四方面或者第四方面的第一種實現(xiàn)方式,或者第四方面的第二種實現(xiàn)方 式,或者第四方面的第三種實現(xiàn)方式,在第四方面的第四種實現(xiàn)方式中,所述裝置還包括:
[0064]保存單元,用于當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述數(shù)據(jù)庫服務 器的緩存時,所述數(shù)據(jù)庫服務器將所述執(zhí)行計劃保存在所述數(shù)據(jù)庫服務器的緩存中。
[0065]第五方面,本發(fā)明實施例提供一種執(zhí)行計劃的存儲系統(tǒng),包括:至少一個客戶端和 數(shù)據(jù)庫服務器;
[0066]所述客戶端,用于接收結構化查詢語言SQL請求,檢測在所述客戶端的緩存中是 否存在所述SQL請求對應的執(zhí)行計劃;
[0067]所述客戶端,還用于當所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃 時,生成位置信息,并且將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為所述客戶端 的緩存和/或數(shù)據(jù)庫服務器的緩存;
[0068]所述數(shù)據(jù)庫服務器,用于接收客戶端發(fā)送的所述位置信息及所述SQL請求,并根 據(jù)所述位置信息及所述SQL請求,獲取所述SQL請求對應的執(zhí)行計劃;
[0069]所述數(shù)據(jù)庫服務器,還用于根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置,當 所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存時,將所述執(zhí)行計劃發(fā)送 給所述客戶端進行保存。
[0070]本發(fā)明實施例提供的執(zhí)行計劃的存儲方法、裝置及系統(tǒng),客戶端將SQL請求及生 成的位置信息發(fā)送給數(shù)據(jù)庫服務器,數(shù)據(jù)庫服務器根據(jù)接收到的SQL請求及位置信息,生 成并執(zhí)行SQL請求對應的執(zhí)行計劃,并且將該執(zhí)行計劃保存至位置信息指示的緩存中。與 現(xiàn)有技術相比,本發(fā)明實施例通過將客戶端執(zhí)行過的執(zhí)行計劃保存在該客戶端的緩存中, 可以避免部分執(zhí)行計劃無法被保存在緩存中,從而提高了執(zhí)行計劃的緩存命中率,進而降 低了系統(tǒng)開銷。
【專利附圖】

【附圖說明】
[0071]為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例或現(xiàn)有技術描述 中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些 實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附 圖獲得其它的附圖。
[0072]圖1為本發(fā)明實施例一提供的一種執(zhí)行計劃的存儲方法流程圖;
[0073]圖2為本發(fā)明實施例一提供的一種執(zhí)行計劃的存儲結構示意圖;
[0074]圖3為本發(fā)明實施例一提供的一種基站結構示意圖;
[0075]圖4為本發(fā)明實施例二提供的一種執(zhí)行計劃的存儲方法流程圖;
[0076]圖5為本發(fā)明實施例二提供的一種執(zhí)行計劃的存儲結構示意圖;
[0077]圖6為本發(fā)明實施例二提供的一種基站結構示意圖;
[0078]圖7為本發(fā)明實施例三提供的一種執(zhí)行計劃的存儲系統(tǒng)示意圖。
【具體實施方式】
[0079]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于 本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它 實施例,都屬于本發(fā)明保護的范圍。
[0080]為使本發(fā)明技術方案的優(yōu)點更加清楚,下面結合附圖和實施例對本發(fā)明作詳細說 明。
[0081]實施例一
[0082]本發(fā)明實施例提供一種執(zhí)行計劃的存儲方法,可以應用于如圖7所示的系統(tǒng)中, 該系統(tǒng)包括至少一個客戶端和數(shù)據(jù)庫服務器,客戶端可以將SQL請求與生成的位置信息發(fā) 送給數(shù)據(jù)庫服務器,還可以接收數(shù)據(jù)庫服務器發(fā)送的SQL請求對應的執(zhí)行計劃,并將該執(zhí) 行計劃保存在客戶端的緩存中;數(shù)據(jù)庫服務器可以接收客戶端發(fā)送的SQL請求與位置信息,還可以將生成的SQL請求對應的執(zhí)行計劃發(fā)送給客戶端。其中,客戶端的緩存及數(shù)據(jù)庫 服務器的緩存中均可以保存SQL請求對應的執(zhí)行計劃。
[0083]基于該系統(tǒng),本發(fā)明實施例提供的執(zhí)行計劃的存儲方法,如圖1所示,可應用于客 戶端側,所述方法包括:
[0084]101客戶端接收結構化查詢語言SQL請求
[0085]其中,SQL請求為一種數(shù)據(jù)庫查詢語言,用于在數(shù)據(jù)庫系統(tǒng)中存取數(shù)據(jù),以及查詢、 更新和管理數(shù)據(jù)庫系統(tǒng)。用戶可以通過DOS (Disk Operating System,磁盤操作系統(tǒng))命 令或者C++ (C with Classes,帶類的C)語言輸入需要執(zhí)行的SQL語句。
[0086]102、客戶端檢測在客戶端的緩存中是否存在SQL請求對應的執(zhí)行計劃。
[0087]其中,SQL請求對應的執(zhí)行計劃為SQL請求在數(shù)據(jù)庫系統(tǒng)中對應的具體執(zhí)行過程。 上述客戶端的緩存中保存有已經(jīng)執(zhí)行并且指定進行保存的執(zhí)行計劃。指定進行保存的執(zhí)行 計劃具體可以為用戶指定的,也可以為數(shù)據(jù)庫服務器中預先配置的,本發(fā)明實施例不做限 定。
[0088]可選地,步驟102具體可以包括:對客戶端的緩存中保存的各個執(zhí)行計劃進行逐 個查找,直到查找到所述SQL請求對應的執(zhí)行計劃。優(yōu)選地,步驟102具體還可以包括:客 戶端首先建立哈希表Hash表,并在Hash表中保存各個執(zhí)行計劃在客戶端的緩存中的位置 信息,然后在Hash表中查找所述SQL請求對應的執(zhí)行計劃在客戶端的緩存中的位置信息, 最后通過所述位置信息在客戶端的緩存中查找所述SQL請求對應的執(zhí)行計劃,從而提升了 SQL請求對應的執(zhí)行計劃的查找效率。
[0089]103a、若客戶端的緩存中不存在SQL請求對應的執(zhí)行計劃,客戶端根據(jù)SQL請求, 進行哈希運算生成位置信息。
[0090]其中,位置信息用于指示與SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置 為客戶端的緩存和/或數(shù)據(jù)庫服務器的緩存。對于本發(fā)明實施例,位置信息具體可以為提 示Hints指定。此時,當Hints指定具體為PlanCacheServer時,指定執(zhí)行計劃保存到數(shù) 據(jù)庫服務器;當Hints指定具體為PlanCacheClient時,指定執(zhí)行計劃保存到客戶端;當 Hints指定具體為PlanCacheAll時,指定執(zhí)行計劃保存到數(shù)據(jù)庫服務器和客戶端。若客戶 端沒有生成位置信息,則數(shù)據(jù)庫服務器默認位置信息為PlanCacheAll,即指定將執(zhí)行計劃 保存到數(shù)據(jù)庫服務器和客戶端。
[0091]對于本發(fā)明實施例,客戶端根據(jù)SQL請求,可以進行哈希運算或者其他運算生成 位置信息,本發(fā)明實施例不做限定。
[0092]通過SQL請求對應的位置信息,可以實現(xiàn)根據(jù)用戶的需求來確定執(zhí)行計劃的緩存 位置,并且實現(xiàn)了在客戶端保存該客戶端已經(jīng)執(zhí)行的執(zhí)行計劃,避免由于數(shù)據(jù)庫服務器的 緩存空間有限,部分執(zhí)行計劃無法永久保存在數(shù)據(jù)庫服務器中,從而造成執(zhí)行計劃的緩存 命中率較低的問題。
[0093]步驟103a之后還包括步驟104a、客戶端將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務 器。
[0094]進一步地,以使得數(shù)據(jù)庫服務器生成SQL請求對應的執(zhí)行計劃,并根據(jù)位置信息 獲取執(zhí)行計劃的緩存位置后,保存執(zhí)行計劃。
[0095]其中,數(shù)據(jù)庫服務器生成SQL請求對應的執(zhí)行計劃的步驟可以包括:數(shù)據(jù)庫服務器解析客戶端發(fā)送的SQL請求,并生成SQL請求對應的執(zhí)行計劃。由于數(shù)據(jù)庫服務器解析 SQL請求并生成執(zhí)行計劃的過程很耗時,所以通過將全部執(zhí)行過的執(zhí)行計劃保存在客戶端 的緩存和/或數(shù)據(jù)庫服務器的緩存中,可以提高執(zhí)行計劃的緩存命中率,避免由于當前數(shù) 據(jù)庫服務器無法對全部執(zhí)行過的執(zhí)行計劃進行保存,造成數(shù)據(jù)庫服務器對執(zhí)行過的SQL請 求重新解析并生成對應的執(zhí)行計劃,從而降低系統(tǒng)的開銷。
[0096]對于本發(fā)明實施例,執(zhí)行計劃的緩存位置具體可以為數(shù)據(jù)庫服務器的緩存或客戶 端的緩存。由于客戶端執(zhí)行過的執(zhí)行計劃所占用的緩存較少,本發(fā)明實施例通過將客戶端 執(zhí)行過的全部執(zhí)行計劃或者部分執(zhí)行計劃保存在該客戶端的緩存中,不會造成客戶端的緩 存和數(shù)據(jù)庫服務器的緩存飽和,與目前將所有客戶端執(zhí)行過的全部執(zhí)行計劃保存在數(shù)據(jù)庫 服務器的緩存時,由于數(shù)據(jù)庫服務器的緩存飽和,造成部分執(zhí)行計劃無法進行保存相比,提 高了執(zhí)行計劃的緩存命中率;同時,客戶端重啟后,客戶端的緩存中保存的執(zhí)行計劃仍會繼 續(xù)保存在客戶端的緩存中,從而避免保存在數(shù)據(jù)庫服務器中的執(zhí)行計劃在數(shù)據(jù)庫服務器重 啟時丟失。
[0097]與步驟103a并列的步驟103b、若客戶端的緩存中存在SQL請求對應的執(zhí)行計劃, 客戶端將執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0098]進一步地,以使得數(shù)據(jù)庫服務器執(zhí)行SQL請求對應的執(zhí)行計劃。對于本發(fā)明實施 例,當客戶端的緩存中保存有已經(jīng)執(zhí)行過的執(zhí)行計劃時,數(shù)據(jù)庫服務器可以直接執(zhí)行該執(zhí) 行計劃,不需要再次解析該執(zhí)行計劃對應的SQL請求以生成該執(zhí)行計劃,從而提高了 SQL請 求的執(zhí)行效率。
[0099]具體地,若客戶端的緩存中存在SQL請求對應的多個執(zhí)行計劃,則客戶端從多個 執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0100]其中,SQL請求通常對應一個執(zhí)行計劃,但部分復雜的SQL請求會對應有多個不同 的執(zhí)行計劃。若客戶端的緩存中保存有SQL請求對應的多個執(zhí)行計劃,此時,客戶端在多個 執(zhí)行計劃中任意選擇一個執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。優(yōu)選地,客戶端可以從多個執(zhí)行 計劃中選擇常用的或者執(zhí)行時間較短的執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0101]可選地,步驟103b之前還可以包括:客戶端通過圖形化界面顯示所述執(zhí)行計劃的 參數(shù)信息,然后客戶端根據(jù)參數(shù)信息修改指令調整所述執(zhí)行計劃的參數(shù)信息,并將調整后 的執(zhí)行計劃保存在所述客戶端的緩存中。此時客戶端將所述調整后的執(zhí)行計劃發(fā)送給所述 數(shù)據(jù)庫服務器。
[0102]其中,圖形化界面具體為在客戶端的屏幕上,通過文本框及箭頭顯示執(zhí)行計劃的 具體信息,并顯示執(zhí)行計劃對應的各個參數(shù)信息,以便用戶更加直觀快速地進行參數(shù)修改。 對于本發(fā)明實施例,未調整執(zhí)行計劃的參數(shù)信息時,數(shù)據(jù)庫服務器執(zhí)行該執(zhí)行計劃的過程 為系統(tǒng)默認的過程,并非最優(yōu)過程,所以通過調整執(zhí)行計劃的參數(shù)信息,可以提高執(zhí)行計劃 在數(shù)據(jù)庫服務器中的執(zhí)行速度。調整后的執(zhí)行計劃作為SQL請求對應的新增的執(zhí)行計劃保 存在客戶端的緩存中,不替換調整前的執(zhí)行計劃。
[0103]步驟104a之后還包括步驟105a、若位置信息指定執(zhí)行計劃的緩存位置為客戶端 的緩存,客戶端接收數(shù)據(jù)庫服務器發(fā)送的SQL請求對應的執(zhí)行計劃,并保存在客戶端的緩 存中。
[0104]對于本發(fā)明實施例,由于可以將執(zhí)行過的執(zhí)行計劃保存在客戶端的緩存中,因此用戶可以通過將客戶端的緩存中保存的執(zhí)行計劃進行復制、導入、導出等操作,可以實現(xiàn)在 不同的客戶端間共享執(zhí)行計劃。具體地,客戶端將緩存中的執(zhí)行計劃復制并以文件形式進 行保存,此時其他客戶端可以獲取該執(zhí)行計劃的文件,并恢復在當前客戶端的緩存中,從而 實現(xiàn)不同客戶端間共享執(zhí)行計劃。
[0105]進一步地,作為圖1所示方法的具體實現(xiàn),本發(fā)明實施例提供了一種執(zhí)行計劃的 存儲裝置,如圖2所示,所述裝置的實體可以為客戶端,所述裝置包括:接收單元21、檢測單 元22、生成單元23、發(fā)送單元24。
[0106]接收單元21,用于接收結構化查詢語言SQL請求。
[0107]檢測單元22,用于檢測在客戶端的緩存中是否存在接收單元21接收的SQL請求對 應的執(zhí)行計劃。
[0108]生成單元23,用于當客戶端的緩存中不存在檢測單元22檢測的SQL請求對應的執(zhí) 行計劃時,生成位置信息。
[0109]其中,位置信息用于指示與SQL請求對應的執(zhí)行計劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務器的緩存。
[0110]發(fā)送單元24,用于將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務器。
[0111]發(fā)送單元24,還用于當客戶端的緩存中存在SQL請求對應的執(zhí)行計劃時,將執(zhí)行 計劃發(fā)送給數(shù)據(jù)庫服務器。
[0112]發(fā)送單元24,還用于當客戶端的緩存中存在SQL請求對應的多個執(zhí)行計劃時,從 多個執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0113]可選地,所述裝置還可以包括:顯示單元25、調整單元26、保存單元27。
[0114]顯示單元25,用于通過圖形化界面顯示檢測單元22檢測到的執(zhí)行計劃的參數(shù)信
肩、O
[0115]調整單元26,用于根據(jù)參數(shù)信息修改指令調整顯示單元25顯示的執(zhí)行計劃的參
數(shù)信息。
[0116]保存單元27,用于將調整后的執(zhí)行計劃保存在客戶端的緩存中。
[0117]發(fā)送單元24,還用于將調整單元26調整后的執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0118]接收單元21,還用于當位置信息指定執(zhí)行計劃的緩存位置為客戶端的緩存時,接 收數(shù)據(jù)庫服務器發(fā)送的SQL請求對應的執(zhí)行計劃。
[0119]保存單元27,還用于將接收單元21接收的執(zhí)行計劃保存在客戶端的緩存中。
[0120]生成單元23,還用于當客戶端的緩存中不存在SQL請求對應的執(zhí)行計劃時,根據(jù) SQL請求,進行哈希運算生成位置信息。
[0121]再進一步地,所述執(zhí)行計劃的存儲裝置的實體可以為客戶端,如圖3所示,所述客 戶端可以包括:接收器31、處理器32、發(fā)送器33。
[0122]接收器31,用于接收結構化查詢語言SQL請求。
[0123]處理器32,用于檢測在客戶端的緩存中是否存在SQL請求對應的執(zhí)行計劃。
[0124]處理器32,還用于當客戶端的緩存中不存在SQL請求對應的執(zhí)行計劃時,生成位
置信息。
[0125]所述位置信息用于指示與SQL請求對應的執(zhí)行計劃的緩存位置,緩存位置為客戶 端的緩存和/或數(shù)據(jù)庫服務器的緩存。[0126]發(fā)送器33,用于將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務器。
[0127]發(fā)送器33,還用于當客戶端的緩存中存在SQL請求對應的執(zhí)行計劃時,將執(zhí)行計 劃發(fā)送給數(shù)據(jù)庫服務器。
[0128]發(fā)送器33,還用于當客戶端的緩存中存在SQL請求對應的多個執(zhí)行計劃時,從多 個執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0129]處理器32,還用于通過圖形化界面顯示執(zhí)行計劃的參數(shù)信息。
[0130]處理器32,還用于根據(jù)參數(shù)信息修改指令調整執(zhí)行計劃的參數(shù)信息。
[0131]處理器32,還用于將調整后的執(zhí)行計劃保存在客戶端的緩存中。
[0132]發(fā)送器33,還用于將執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。
[0133]接收器31,用于當指定信息指定執(zhí)行計劃的緩存位置為客戶端的緩存時,接收數(shù) 據(jù)庫服務器發(fā)送的SQL請求對應的執(zhí)行計劃。
[0134]處理器32,還用于將執(zhí)行計劃保存在客戶端的緩存中。
[0135]處理器32,還用于當客戶端的緩存中不存在SQL請求對應的執(zhí)行計劃時,根據(jù)SQL 請求,進行哈希運算生成位置信息。
[0136]需要說明的是,本發(fā)明實施例中提供的執(zhí)行計劃的存儲裝置中各功能單元所對應 的其他相應描述,可以參考圖1中的對應描述,在此不再贅述。
[0137]本發(fā)明實施例提供的執(zhí)行計劃的存儲方法及裝置,客戶端將SQL請求及生成的位 置信息發(fā)送給數(shù)據(jù)庫服務器,數(shù)據(jù)庫服務器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí) 行SQL請求對應的執(zhí)行計劃,并且將該執(zhí)行計劃保存至位置信息指示的緩存中。與現(xiàn)有技 術相比,本發(fā)明實施例通過將客戶端執(zhí)行過的執(zhí)行計劃保存在該客戶端的緩存中,可以避 免部分執(zhí)行計劃無法被保存在緩存中,從而提高了執(zhí)行計劃的緩存命中率,進而降低了系 統(tǒng)開銷。
[0138]實施例二
[0139]本發(fā)明實施例提供一種執(zhí)行計劃的存儲方法,可以應用于如圖7所示的系統(tǒng)中, 該系統(tǒng)包括至少一個客戶端和數(shù)據(jù)庫服務器,客戶端可以將SQL請求與生成的位置信息發(fā) 送給數(shù)據(jù)庫服務器,還可以接收數(shù)據(jù)庫服務器發(fā)送的SQL請求對應的執(zhí)行計劃,并將該執(zhí) 行計劃保存在客戶端的緩存中;數(shù)據(jù)庫服務器可以接收客戶端發(fā)送的SQL請求與位置信 息,還可以將生成的SQL請求對應的執(zhí)行計劃發(fā)送給客戶端。其中,客戶端的緩存及數(shù)據(jù)庫 服務器的緩存中均可以保存SQL請求對應的執(zhí)行計劃。
[0140]基于該系統(tǒng),本發(fā)明實施例提供的執(zhí)行計劃的存儲方法,如圖4所示,可應用于數(shù) 據(jù)庫服務器側,所述方法包括:
[0141]401、數(shù)據(jù)庫服務器接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求。
[0142]可選地,步驟401之前還可以包括:若客戶端的緩存中存在客戶端發(fā)送的SQL請求 對應的執(zhí)行計劃,數(shù)據(jù)庫服務器接收客戶端發(fā)送的執(zhí)行計劃后,直接執(zhí)行該執(zhí)行計劃,不需 要再次解析該執(zhí)行計劃對應的SQL請求以生成該執(zhí)行計劃,從而提高了 SQL請求的執(zhí)行效率。
[0143]具體地,若客戶端的緩存中存在SQL請求對應的多個執(zhí)行計劃,數(shù)據(jù)庫服務器接 收客戶端發(fā)送的從多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃,并且執(zhí)行該執(zhí)行計劃。
[0144]其中,SQL請求通常對應一個執(zhí)行計劃,但部分復雜的SQL請求會對應有多個不同的執(zhí)行計劃。若客戶端的緩存中保存有SQL請求對應的多個執(zhí)行計劃,此時,客戶端在多個 執(zhí)行計劃中選擇任意的一個執(zhí)行計劃發(fā)送給數(shù)據(jù)庫服務器。優(yōu)選地,數(shù)據(jù)庫服務器接收客 戶端發(fā)送的,從多個執(zhí)行計劃中選擇的常用的或者執(zhí)行時間較短的一個執(zhí)行計劃。
[0145]可替換地,若客戶端的緩存中存在SQL請求對應的執(zhí)行計劃,并且客戶端通過圖 形化界面對執(zhí)行計劃進行參數(shù)調整,數(shù)據(jù)庫服務器接收客戶端發(fā)送的調整后的執(zhí)行計劃, 并且執(zhí)行該執(zhí)行計劃。
[0146]其中,圖形化界面具體為在客戶端的屏幕上,通過文本框及箭頭顯示執(zhí)行計劃的 具體信息,并顯示執(zhí)行計劃對應的各個參數(shù)信息,以便用戶更加直觀快速地進行參數(shù)修改。 對于本發(fā)明實施例,未調整執(zhí)行計劃的參數(shù)信息時,數(shù)據(jù)庫服務器執(zhí)行該執(zhí)行計劃的過程 為系統(tǒng)默認的過程,并非最優(yōu)過程,所以通過調整執(zhí)行計劃的參數(shù)信息,可以提高執(zhí)行計劃 在數(shù)據(jù)庫服務器中的執(zhí)行速度。調整后的執(zhí)行計劃作為SQL請求對應的新增的執(zhí)行計劃保 存在客戶端的緩存中,不替換調整前的執(zhí)行計劃。
[0147]對于本發(fā)明實施例中的數(shù)據(jù)庫服務器具體可以為數(shù)據(jù)庫數(shù)據(jù)庫服務器,數(shù)據(jù)庫數(shù) 據(jù)庫服務器可以為用戶提供查詢、更新和管理等服務。
[0148]402、數(shù)據(jù)庫服務器獲取SQL請求對應的執(zhí)行計劃。
[0149]本實施例中,步驟402具體可以為,數(shù)據(jù)庫服務器查找緩存中是否存在該SQL請求 對應的執(zhí)行計劃,若數(shù)據(jù)庫服務器的緩存中存在該SQL請求對應的執(zhí)行計劃,數(shù)據(jù)庫服務 器直接獲取該執(zhí)行計劃,以便數(shù)據(jù)庫服務器執(zhí)行該SQL請求對應的執(zhí)行計劃;若數(shù)據(jù)庫服 務器的緩存中不存在該SQL請求對應的執(zhí)行計劃,數(shù)據(jù)庫服務器對該SQL請求進行解析,并 生成該SQL請求對應的執(zhí)行計劃,以便數(shù)據(jù)庫服務器執(zhí)行該SQL請求對應的執(zhí)行計劃。
[0150]403、數(shù)據(jù)庫服務器根據(jù)位置信息獲取執(zhí)行計劃的緩存位置。
[0151]其中,位置信息用于指示與SQL請求對應的執(zhí)行計劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務器的緩存。對于本發(fā)明實施例,位置信息具體可以為Hints 指定。此時,當Hints指定具體為PlanCacheServer時,指定執(zhí)行計劃保存到數(shù)據(jù)庫服務器 的緩存中;當Hints指定具體為PlanCacheClient時,指定執(zhí)行計劃保存到客戶端的緩存 中;當Hints指定具體為PlanCacheAll時,指定執(zhí)行計劃保存到數(shù)據(jù)庫服務器的緩存中和 客戶端的緩存中。若客戶端沒有生成SQL請求中需要攜帶的位置信息,則數(shù)據(jù)庫服務器默 認位置信息為PlanCacheAll,即指定執(zhí)行計劃保存到數(shù)據(jù)庫服務器的緩存中和客戶端的緩 存中。
[0152]對于本發(fā)明實施例,客戶端根據(jù)SQL請求,可以進行哈希運算或者其他運算生成 位置信息,本發(fā)明實施例不做限定。
[0153]通過SQL請求對應的位置信息,可以實現(xiàn)根據(jù)用戶的需求來確定執(zhí)行計劃的緩存 位置,并且實現(xiàn)了在客戶端保存該客戶端已經(jīng)執(zhí)行的執(zhí)行計劃,避免由于數(shù)據(jù)庫服務器的 緩存空間有限,部分執(zhí)行計劃無法永久保存在數(shù)據(jù)庫服務器中,從而造成執(zhí)行計劃的緩存 命中率較低的問題。
[0154]404a、若位置信息指定執(zhí)行計劃的緩存位置為客戶端的緩存,數(shù)據(jù)庫服務器將執(zhí) 行計劃發(fā)送給客戶端進行保存。
[0155]對于本發(fā)明實施例,由于客戶端的緩存中足夠存放該客戶端的全部執(zhí)行計劃,并 且客戶端的緩存中保存的執(zhí)行計劃不會因為客戶端重新啟動而丟失,數(shù)據(jù)庫服務器通過將該執(zhí)行計劃發(fā)送給客戶端進行保存,可以保證全部執(zhí)行計劃永久保存在該客戶端的緩存 中,從而提高執(zhí)行計劃的緩存命中率;同時,由于客戶端的全部執(zhí)行計劃能夠永久存放在客 戶端的緩存中,所以數(shù)據(jù)庫服務器再次接收該SQL請求時,不需要再次解析SQL請求并生成 該SQL請求對應的執(zhí)行計劃,從而可以降低系統(tǒng)開銷。
[0156]與步驟404a并列的步驟404b、若位置信息指定執(zhí)行計劃的緩存位置為數(shù)據(jù)庫服 務器的緩存,數(shù)據(jù)庫服務器將執(zhí)行計劃保存在數(shù)據(jù)庫服務器的緩存中。
[0157]與步驟404a和步驟404b并列的步驟404c、若位置信息指定執(zhí)行計劃的緩存位 置為客戶端的緩存和數(shù)據(jù)庫服務器的緩存,數(shù)據(jù)庫服務器將執(zhí)行計劃發(fā)送給客戶端進行保 存,并且將執(zhí)行計劃保存在數(shù)據(jù)庫服務器的緩存中。
[0158]對于本發(fā)明實施例,將某一個客戶端的SQL請求對應的執(zhí)行計劃同時保存在客戶 端的緩存和數(shù)據(jù)庫服務器的緩存中,能夠提高該SQL請求對應的執(zhí)行計劃的緩存命中率, 同時,通過將該SQL請求對應的執(zhí)行計劃保存在數(shù)據(jù)庫服務器的緩存中,從而使得當其他 客戶端發(fā)送該SQL請求給數(shù)據(jù)庫服務器時,數(shù)據(jù)庫服務器也能夠直接查找到該SQL請求對 應的執(zhí)行計劃并進行執(zhí)行,從而提高了執(zhí)行計劃的執(zhí)行效率。
[0159]進一步地,作為圖4所示方法的具體實現(xiàn),本發(fā)明實施例提供了一種執(zhí)行計劃的 存儲裝置,如圖5所示,所述裝置的實體可以為數(shù)據(jù)庫服務器,所述裝置包括:接收單元51、 獲取單元52、發(fā)送單元53。
[0160]接收單元51,用于接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求。
[0161]其中,位置信息用于指示與SQL請求對應的執(zhí)行計劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務器的緩存。
[0162]獲取單元52,用于根據(jù)接收單元51接收的SQL請求,獲取SQL請求對應的執(zhí)行計 劃。
[0163]獲取單元52,還用于根據(jù)位置信息獲取執(zhí)行計劃的緩存位置。
[0164]發(fā)送單元53,用于當位置信息指定執(zhí)行計劃的緩存位置為客戶端的緩存時,數(shù)據(jù) 庫服務器將執(zhí)行計劃發(fā)送給客戶端進行保存。
[0165]接收單元51,還用于當客戶端的緩存中存在SQL請求對應的執(zhí)行計劃時,接收客 戶端發(fā)送的執(zhí)行計劃。
[0166]可選地,所述裝置還可以包括:執(zhí)行單元54。
[0167]執(zhí)行單元54,用于執(zhí)行接收單元51接收的執(zhí)行計劃。
[0168]接收單元51,還用于當客戶端的緩存中存在SQL請求對應的多個執(zhí)行計劃時,接 收客戶端發(fā)送的從多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃。
[0169]執(zhí)行單元54,還用于執(zhí)行接收單元51接收的該任意一個執(zhí)行計劃。
[0170]接收單元51,還用于當客戶端的緩存中存在SQL請求對應的執(zhí)行計劃,并且客戶 端通過圖形化界面對執(zhí)行計劃進行參數(shù)調整時,接收客戶端發(fā)送的調整后的執(zhí)行計劃。
[0171]執(zhí)行單元54,還用于執(zhí)行接收單元51接收的調整后的執(zhí)行計劃。
[0172]可選地,所述裝置還可以包括保存單元55。
[0173]保存單元55,用于當位置信息指定執(zhí)行計劃的緩存位置為數(shù)據(jù)庫服務器的緩存 時,數(shù)據(jù)庫服務器將執(zhí)行計劃保存在數(shù)據(jù)庫服務器的緩存中。
[0174]再進一步地,所述執(zhí)行計劃的存儲裝置的實體可以為數(shù)據(jù)庫服務器,如圖6所示,所述數(shù)據(jù)庫服務器可以包括:接收器61、處理器62、發(fā)送器63。
[0175]接收器61,用于接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求。
[0176]其中,位置信息用于指示與SQL請求對應的執(zhí)行計劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務器的緩存。
[0177]處理器62,用于根據(jù)SQL請求,獲取SQL請求對應的執(zhí)行計劃。
[0178]處理器62,還用于根據(jù)位置信息獲取執(zhí)行計劃的緩存位置。
[0179]發(fā)送器63,用于當位置信息指定執(zhí)行計劃的緩存位置為客戶端的緩存時,數(shù)據(jù)庫 服務器將執(zhí)行計劃發(fā)送給客戶端進行保存。
[0180]接收器61,還用于當客戶端的緩存中存在SQL請求對應的執(zhí)行計劃時,接收客戶 端發(fā)送的執(zhí)行計劃。
[0181]處理器62,還用于執(zhí)行該執(zhí)行計劃。
[0182]接收器61,還用于當客戶端的緩存中存在SQL請求對應的多個執(zhí)行計劃時,接收 客戶端發(fā)送的從多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃。
[0183]處理器62,還用于執(zhí)行該任意一個執(zhí)行計劃。
[0184]接收器61,還用于當客戶端的緩存中存在SQL請求對應的執(zhí)行計劃,并且客戶端 通過圖形化界面對執(zhí)行計劃進行參數(shù)調整時,接收客戶端發(fā)送的調整后的執(zhí)行計劃。
[0185]處理器62,還用于執(zhí)行調整后的執(zhí)行計劃。
[0186]處理器62,還用于當位置信息指定執(zhí)行計劃的緩存位置為數(shù)據(jù)庫服務器的緩存 時,數(shù)據(jù)庫服務器將執(zhí)行計劃保存在數(shù)據(jù)庫服務器的緩存中。
[0187]需要說明的是,本發(fā)明實施例中提供的執(zhí)行計劃的存儲裝置中各功能單元所對應 的其他相應描述,可以參考圖4中的對應描述,在此不再贅述。
[0188]本發(fā)明實施例提供的執(zhí)行計劃的存儲方法及裝置,客戶端將SQL請求及生成的位 置信息發(fā)送給數(shù)據(jù)庫服務器,數(shù)據(jù)庫服務器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí) 行SQL請求對應的執(zhí)行計劃,并且將該執(zhí)行計劃保存至位置信息指示的緩存中。與現(xiàn)有技 術相比,本發(fā)明實施例通過將客戶端執(zhí)行過的執(zhí)行計劃保存在該客戶端的緩存中,可以避 免部分執(zhí)行計劃無法被保存在緩存中,從而提高了執(zhí)行計劃的緩存命中率,進而降低了系 統(tǒng)開銷。
[0189]實施例三
[0190]本發(fā)明實施例提供一種執(zhí)行計劃的存儲系統(tǒng),如圖7所示,所述系統(tǒng)包括:至少一 個客戶端71和數(shù)據(jù)庫服務器72。
[0191]客戶端71,用于首先獲取結構化查詢語言SQL請求,然后在緩存中檢測是否存在 SQL請求對應的執(zhí)行計劃,當緩存中不存在SQL請求對應的執(zhí)行計劃時,生成位置信息,并 且將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務器72。
[0192]數(shù)據(jù)庫服務器72,用于首先接收客戶端71發(fā)送的位置信息及SQL請求,然后根據(jù) SQL請求,獲取SQL請求對應的執(zhí)行計劃,最后根據(jù)位置信息獲取執(zhí)行計劃的緩存位置,若 位置信息指定執(zhí)行計劃的緩存位置為客戶端71的緩存,將執(zhí)行計劃發(fā)送給客戶端71進行保存。
[0193]本發(fā)明實施例提供的執(zhí)行計劃的存儲系統(tǒng),客戶端將SQL請求及生成的位置信息 發(fā)送給數(shù)據(jù)庫服務器,數(shù)據(jù)庫服務器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí)行SQL請求對應的執(zhí)行計劃,并且將該執(zhí)行計劃保存至位置信息指示的緩存中。與目前數(shù)據(jù)庫服務 器進行執(zhí)行計劃的保存時,通過為不同客戶端在數(shù)據(jù)庫服務器中分別配置緩存區(qū),以保存 不同的客戶端對應的執(zhí)行計劃相比,本發(fā)明實施例通過將客戶端執(zhí)行過的執(zhí)行計劃保存在 該客戶端的緩存中,可以避免部分執(zhí)行計劃無法被保存在緩存中,從而提高了執(zhí)行計劃的 緩存命中率,進而降低了系統(tǒng)開銷。
[0194]本發(fā)明實施例提供的方法、裝置及系統(tǒng)還可以用于解決單機數(shù)據(jù)庫、雙機數(shù)據(jù)庫 及集群數(shù)據(jù)庫中存在的一些問題。
[0195]例如,在單機數(shù)據(jù)庫的場景下,單機數(shù)據(jù)庫服務器的緩存中不足以存放各個客戶 端對應的全部執(zhí)行計劃,通過本發(fā)明實施例提供的方法,可以將需要在單機數(shù)據(jù)庫服務器 的緩存中保存的執(zhí)行計劃保存在單機數(shù)據(jù)庫服務器對應的各個客戶端的緩存中,從而減小 了單機數(shù)據(jù)庫服務器的緩存中執(zhí)行計劃所占用的緩存空間。
[0196]在雙機數(shù)據(jù)庫的場景下,由于雙機數(shù)據(jù)庫服務器將執(zhí)行計劃隨機的保存在兩個數(shù) 據(jù)庫中的某一個數(shù)據(jù)庫中,當客戶端發(fā)起某一個SQL請求時,雙機數(shù)據(jù)庫服務器就需要查 找兩個數(shù)據(jù)庫中的全部執(zhí)行計劃,因此在雙機數(shù)據(jù)庫場景下,對SQL請求對應的執(zhí)行計劃 的查找復雜度較高。通過本發(fā)明實施例提供的方法,可以將執(zhí)行過的SQL請求對應的執(zhí)行 計劃保存在客戶端的緩存中,當客戶端發(fā)起一個SQL請求時,可以直接從客戶端的緩存中 獲取該請求對應的執(zhí)行計劃,從而避免雙機數(shù)據(jù)庫服務器查找兩個數(shù)據(jù)庫中的全部執(zhí)行計 劃,進而降低雙機數(shù)據(jù)庫服務器的查找復雜度。
[0197]同樣的,在集群數(shù)據(jù)庫的場景下,由于集群數(shù)據(jù)庫服務器將執(zhí)行計劃隨機的保存 在多個數(shù)據(jù)庫中的某一個數(shù)據(jù)庫中,當客戶端發(fā)起某一個SQL請求時,集群數(shù)據(jù)庫服務器 就需要查找各個數(shù)據(jù)庫中的全部執(zhí)行計劃,因此在集群數(shù)據(jù)庫場景下的SQL請求對應的執(zhí) 行計劃的查找復雜度高。通過本發(fā)明實施例提供的方法,可以將執(zhí)行過的SQL請求對應的 執(zhí)行計劃保存在客戶端的緩存中,當客戶端發(fā)起一個SQL請求時,可以直接從客戶端的緩 存中獲取該請求對應的執(zhí)行計劃,從而避免集群數(shù)據(jù)庫服務器查找各個數(shù)據(jù)庫中的全部執(zhí) 行計劃,進而降低集群數(shù)據(jù)庫服務器的查找復雜度。
[0198]本發(fā)明實施例提供的執(zhí)行計劃的存儲裝置可以實現(xiàn)上述提供的方法實施例,具體 功能實現(xiàn)請參見方法實施例中的說明,在此不再贅述。本發(fā)明實施例提供的執(zhí)行計劃的存 儲方法、裝置及系統(tǒng)可以適用于提高執(zhí)行計劃的緩存命中率,減少系統(tǒng)開銷,但不僅限于 此。
[0199]本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以 通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質 中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁 碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Random Access Memory, RAM)等。
[0200]以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何 熟悉本【技術領域】的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到的變化或替換,都應 涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應該以權利要求的保護范圍為準。
【權利要求】
1.一種執(zhí)行計劃的存儲方法,其特征在于,包括:客戶端接收結構化查詢語言SQL請求;所述客戶端檢測在所述客戶端的緩存中是否存在所述SQL請求對應的執(zhí)行計劃; 若所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃,所述客戶端生成位置信息,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務器的緩存;所述客戶端將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器,以使得所述數(shù)據(jù)庫服務器生成所述SQL請求對應的執(zhí)行計劃,并將所述執(zhí)行計劃保存到所述位置信息指示的緩存中。
2.根據(jù)權利要求1所述的執(zhí)行計劃的存儲方法,其特征在于,還包括:若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述客戶端將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器,以使得所述數(shù)據(jù)庫服務器執(zhí)行所述執(zhí)行計劃。
3.根據(jù)權利要求2所述的執(zhí)行計劃的存儲方法,其特征在于,所述若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述客戶端將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器,以使得所述數(shù)據(jù)庫服務器執(zhí)行所述執(zhí)行計劃,具體包括:若所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃,則所述客戶端從所述多個執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
4.根據(jù)權利要求2所述的執(zhí)行計劃的存儲方法,其特征在于,在所述客戶端將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器之前,所述方法還包括:所述客戶端通過圖形化界面顯示 所述執(zhí)行計劃的參數(shù)信息;所述客戶端根據(jù)參數(shù)信息修改指令調整所述執(zhí)行計劃的參數(shù)信息,并將調整后的執(zhí)行計劃保存在所述客戶端的緩存中;所述客戶端將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器的步驟包括:所述客戶端將所述調整后的執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
5.根據(jù)權利要求1所述的執(zhí)行計劃的存儲方法,其特征在于,在所述客戶端將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器之后,所述方法還包括:若所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存,所述客戶端接收所述數(shù)據(jù)庫服務器發(fā)送的所述SQL請求對應的執(zhí)行計劃,并保存在所述客戶端的緩存中。
6.根據(jù)權利要求1所述的執(zhí)行計劃的存儲方法,其特征在于,所述若所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃,所述客戶端生成位置信息,具體包括:若所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃,所述客戶端根據(jù)所述 SQL請求,進行哈希運算生成所述位置信息。
7.一種執(zhí)行計劃的存儲方法,其特征在于,包括:數(shù)據(jù)庫服務器接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為客戶端的緩存和/ 或所述數(shù)據(jù)庫服務器的緩存;所述數(shù)據(jù)庫服務器獲取所述SQL請求對應的執(zhí)行計劃;所述數(shù)據(jù)庫服務器根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置;若所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存,所述數(shù)據(jù)庫服務器將所述執(zhí)行計劃發(fā)送給所述客戶端進行保存。
8.根據(jù)權利要求7所述的執(zhí)行計劃的存儲方法,其特征在于,在所述數(shù)據(jù)庫服務器接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求之前,所述方法還包括:若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的所述執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃。
9.根據(jù)權利要求8所述的執(zhí)行計劃的存儲方法,其特征在于,所述若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的所述執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃,具體包括:若所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的從所述多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃。
10.根據(jù)權利要求8所述的執(zhí)行計劃的存儲方法,其特征在于,所述若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的所述執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃,具體包括:若所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計劃進行參數(shù)調整,所述數(shù)據(jù)庫服務器接收所述客戶端發(fā)送的調整后的執(zhí)行計劃,并且執(zhí)行所述執(zhí)行計劃。
11.根據(jù)權利要求7所述的執(zhí)行計劃的存儲方法,其特征在于,在所述數(shù)據(jù)庫服務器根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置之后,所述方法還包括:若所述位置信息指定所述執(zhí)行計劃的緩存位置為所述數(shù)據(jù)庫服務器的緩存,所述數(shù)據(jù)庫服務器將所述執(zhí)行計劃保存在所述數(shù)據(jù)庫服務器的緩存中。
12.—種執(zhí)行計劃的存儲裝置,其特征在于,包括:接收單元,用于接收結構化·查詢語言SQL請求;檢測單元,用于檢測在所述客戶端的緩存中是否存在所述接收單元接收的所述SQL請求對應的執(zhí)行計劃;生成單元,用于當所述客戶端的緩存中不存在所述檢測單元檢測的所述SQL請求對應的執(zhí)行計劃時,生成位置信息,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務器的緩存;發(fā)送單元,用于將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器。
13.根據(jù)權利要求12所述的執(zhí)行計劃的存儲裝置,其特征在于,所述發(fā)送單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃時, 將所述執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
14.根據(jù)權利要求13所述的執(zhí)行計劃的存儲裝置,其特征在于,所述發(fā)送單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃時,從所述多個執(zhí)行計劃中選擇任意一個執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
15.根據(jù)權利要求13所述的執(zhí)行計劃的存儲方法,其特征在于,所述裝置還包括:顯示單元,用于通過圖形化界面顯示所述檢測單元檢測到的所述執(zhí)行計劃的參數(shù)信息;調整單元,用于根據(jù)參數(shù)信息修改指令調整所述顯示單元顯示的所述執(zhí)行計劃的參數(shù)信息;保存單元,用于將調整后的執(zhí)行計劃保存在所述客戶端的緩存中;所述發(fā)送單元,還用于將所述調整單元調整后的執(zhí)行計劃發(fā)送給所述數(shù)據(jù)庫服務器。
16.根據(jù)權利要求12所述的執(zhí)行計劃的存儲裝置,其特征在于,所述接收單元,還用于當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存時,接收所述數(shù)據(jù)庫服務器發(fā)送的所述SQL請求對應的執(zhí)行計劃;所述保存單元,還用于將所述接收單元接收的所述執(zhí)行計劃保存在所述客戶端的緩存中。
17.根據(jù)權利要求12所述的執(zhí)行計劃的存儲裝置,其特征在于,所述生成單元,還用于當所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃時,根據(jù)所述SQL請求,進行哈希運算生成所述位置信息。
18.一種執(zhí)行計劃的存儲裝置,其特征在于,包括:接收單元,用于接收客戶端發(fā)送的位置信息及結構化查詢語言SQL請求,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為客戶端的緩存和 /或數(shù)據(jù)庫服務器的緩存;獲取單元,用于根據(jù)所述接收單元接收的所述SQL請求,獲取所述SQL請求對應的執(zhí)行計劃;所述獲取單元,還用于根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置;發(fā)送單元,用于當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存時,所述數(shù)據(jù)庫服務器將所述執(zhí)行計劃發(fā)送給所述客戶端進行保存。
19.根據(jù)權利要求18所述的執(zhí)行計劃的存儲裝置,其特征在于,所述接收單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃時, 接收所述客戶端發(fā)送的所述執(zhí)行計劃;所述裝置還包括:執(zhí)行單元,用于執(zhí)行所述接收單元接收的所述執(zhí)行計劃。
20.根據(jù)權利要求19所述的執(zhí)行計劃的存儲裝置,其特征在于,所述接收單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的多個執(zhí)行計劃時,接收所述客戶端發(fā)送的從所述多個執(zhí)行計劃中選擇的任意一個執(zhí)行計劃;所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述任意一個執(zhí)行計劃。
21.根據(jù)權利要求19所述的執(zhí)行計劃的存儲裝置,其特征在于,所述接收單元,還用于當所述客戶端的緩存中存在所述SQL請求對應的執(zhí)行計劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計劃進行參數(shù)調整時,接收所述客戶端發(fā)送的調整后的執(zhí)行計劃;所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述調整后的執(zhí)行計劃。
22.根據(jù)權利要求18所述的執(zhí)行計劃的存儲裝置,其特征在于,所述裝置還包括:保存單元,用于當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述數(shù)據(jù)庫服務器的緩存時,所述數(shù)據(jù)庫服務器將所述執(zhí)行計劃保存在所述數(shù)據(jù)庫服務器的緩存中。
23.一種執(zhí)行計劃的存儲系統(tǒng),其特征在于,包括:至少一個客戶端和數(shù)據(jù)庫服務器; 所述客戶端,用于接收結構化查詢語言SQL請求,檢測在所述客戶端的緩存中是否存在所述SQL請求對應的執(zhí)行計劃;所述客戶端,還用于當所述客戶端的緩存中不存在所述SQL請求對應的執(zhí)行計劃時, 生成位置信息,并且將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務器,所述位置信息用于指示與所述SQL請求對應的執(zhí)行計劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務器的緩存;所述數(shù)據(jù)庫服務器,用于接收客戶端發(fā)送的所述位置信息及所述SQL請求,并根據(jù)所述位置信息及所述SQL請求,獲取所述SQL請求對應的執(zhí)行計劃;所述數(shù)據(jù)庫服務器,還用于根據(jù)所述位置信息獲取所述執(zhí)行計劃的緩存位置,當所述位置信息指定所述執(zhí)行計劃的緩存位置為所述客戶端的緩存時,將所述執(zhí)行計劃發(fā)送給所述客戶端進行保存。
【文檔編號】G06F17/30GK103577561SQ201310507367
【公開日】2014年2月12日 申請日期:2013年10月24日 優(yōu)先權日:2013年10月24日
【發(fā)明者】于巍, 文繼軍, 劉輝軍 申請人:華為技術有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
仪陇县| 夹江县| 敖汉旗| 惠水县| 新竹市| 赤水市| 虹口区| 治县。| 乌什县| 玉环县| 泉州市| 吴旗县| 绥滨县| 萍乡市| 漳平市| 莱西市| 天等县| 象山县| 承德市| 重庆市| 成武县| 游戏| 吴旗县| 含山县| 黄龙县| 廊坊市| 曲阜市| 西昌市| 吉木乃县| 社旗县| 新宁县| 会同县| 登封市| 永兴县| 稷山县| 柳州市| 梁河县| 桑植县| 桑植县| 莲花县| 松滋市|