執(zhí)行計(jì)劃的存儲方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例公開了一種執(zhí)行計(jì)劃的存儲方法、裝置及系統(tǒng),涉及數(shù)據(jù)庫領(lǐng)域,可以提高執(zhí)行計(jì)劃的緩存命中率,減少系統(tǒng)開銷。所述方法包括:客戶端將SQL請求及生成的位置信息發(fā)送給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí)行SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且將該執(zhí)行計(jì)劃保存至位置信息指示的緩存中。本發(fā)明實(shí)施例適用于在客戶端或數(shù)據(jù)庫服務(wù)器的緩存中保存SQL請求對應(yīng)的執(zhí)行計(jì)劃。
【專利說明】執(zhí)行計(jì)劃的存儲方法、裝置及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,特別涉及一種執(zhí)行計(jì)劃的存儲方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]數(shù)據(jù)庫中的執(zhí)行計(jì)劃是指對SQL(Structured query language,結(jié)構(gòu)化查詢語言) 請求的執(zhí)行過程的描述。數(shù)據(jù)庫服務(wù)器每次執(zhí)行客戶端發(fā)起的SQL請求時,都需要對SQL 請求進(jìn)行解析并生成對應(yīng)的執(zhí)行計(jì)劃,并將執(zhí)行計(jì)劃保存在數(shù)據(jù)庫服務(wù)器的內(nèi)存中。目前 數(shù)據(jù)庫服務(wù)器在進(jìn)行執(zhí)行計(jì)劃的保存時,會針對不同的客戶端分別配置緩存區(qū),以保存不 同的客戶端對應(yīng)的執(zhí)行計(jì)劃。
[0003]然而通過目前這種執(zhí)行計(jì)劃的存儲方式進(jìn)行執(zhí)行計(jì)劃保存時,數(shù)據(jù)庫服務(wù)器為不 同的客戶端分別配置緩存區(qū)。由于當(dāng)客戶端所分配的緩存區(qū)飽和后,利用率低的執(zhí)行計(jì)劃 所占用的緩存會被釋放,以使得該客戶端利用率高的執(zhí)行計(jì)劃緩存在所分配的緩存區(qū)中, 即上述利用率低的執(zhí)行計(jì)劃無法被保存在緩存中,當(dāng)客戶端再次發(fā)起該SQL請求時,數(shù)據(jù) 庫服務(wù)器需要重新解析該SQL請求并生成對應(yīng)的執(zhí)行計(jì)劃,從而造成執(zhí)行計(jì)劃的緩存命中 率較低,增加了系統(tǒng)開銷。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲方法、裝置及系統(tǒng),可以提高執(zhí)行計(jì)劃的 緩存命中率,減少系統(tǒng)開銷。第一方面,本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲方法,包 括:
[0005]客戶端接收結(jié)構(gòu)化查詢語言SQL請求;
[0006]所述客戶端檢測在所述客戶端的緩存中是否存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;
[0007]若所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端生成位 置信息,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位 置為所述客戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存;
[0008]所述客戶端將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得所 述數(shù)據(jù)庫服務(wù)器生成所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并將所述執(zhí)行計(jì)劃保存到所述位置信 息指示的緩存中。
[0009]在第一方面的第一種實(shí)現(xiàn)方式中,還包括:
[0010]若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端將所述執(zhí) 行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得所述數(shù)據(jù)庫服務(wù)器執(zhí)行所述執(zhí)行計(jì)劃。
[0011]結(jié)合第一方面或者第一方面的第一種實(shí)現(xiàn)方式,在第一方面的第二種實(shí)現(xiàn)方式 中,所述若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端將所述執(zhí) 行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得所述數(shù)據(jù)庫服務(wù)器執(zhí)行所述執(zhí)行計(jì)劃,具體包 括:
[0012]若所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,則所述客戶端從所述多個執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
[0013]結(jié)合第一方面或者第一方面的第一種實(shí)現(xiàn)方式,或者第一方面的第二種實(shí)現(xiàn)方 式,在第一方面的第三種實(shí)現(xiàn)方式中,在所述客戶端將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服 務(wù)器之前,所述方法還包括:
[0014]所述客戶端通過圖形化界面顯示所述執(zhí)行計(jì)劃的參數(shù)信息;
[0015]所述客戶端根據(jù)參數(shù)信息修改指令調(diào)整所述執(zhí)行計(jì)劃的參數(shù)信息,并將調(diào)整后的 執(zhí)行計(jì)劃保存在所述客戶端的緩存中;
[0016]所述客戶端將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器的步驟包括:
[0017]所述客戶端將所述調(diào)整后的執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
[0018]結(jié)合第一方面或者第一方面的第一種實(shí)現(xiàn)方式,或者第一方面的第二種實(shí)現(xiàn)方 式,或者第一方面的第三種實(shí)現(xiàn)方式,在第一方面的第四種實(shí)現(xiàn)方式中,在所述客戶端將所 述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器之后,所述方法還包括:
[0019]若所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存,所述客戶端 接收所述數(shù)據(jù)庫服務(wù)器發(fā)送的所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并保存在所述客戶端的緩存 中。
[0020]結(jié)合第一方面或者第一方面的第一種實(shí)現(xiàn)方式,或者第一方面的第二種實(shí)現(xiàn)方 式,或者第一方面的第三種實(shí)現(xiàn)方式,或者第一方面的第四種實(shí)現(xiàn)方式,在第一方面的第五 種實(shí)現(xiàn)方式中,所述若所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客 戶端生成位置信息,具體包括:
[0021]若所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端根據(jù)所 述SQL請求,進(jìn)行哈希運(yùn)算生成所述位置信息。第二方面,本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃 的存儲裝置,包括:
[0022]接收單元,用于接收結(jié)構(gòu)化查詢語言SQL請求;
[0023]檢測單元,用于檢測在所述客戶端的緩存中是否存在所述接收單元接收的所述 SQL請求對應(yīng)的執(zhí)行計(jì)劃;
[0024]生成單元,用于當(dāng)所述客戶端的緩存中不存在所述檢測單元檢測的所述SQL請求 對應(yīng)的執(zhí)行計(jì)劃時,生成位置信息,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì) 劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存;
[0025]發(fā)送單元,用于將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
[0026]在第二方面的第一種實(shí)現(xiàn)方式中,所述發(fā)送單元,還用于當(dāng)所述客戶端的緩存中 存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時,將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得 所述數(shù)據(jù)庫服務(wù)器執(zhí)行所述執(zhí)行計(jì)劃。
[0027]結(jié)合第二方面或者第二方面的第一種實(shí)現(xiàn)方式,在第二方面的第二種實(shí)現(xiàn)方式 中,所述發(fā)送單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃 時,則從所述多個執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
[0028]結(jié)合第二方面或者第二方面的第一種實(shí)現(xiàn)方式,或者第二方面的第二種實(shí)現(xiàn)方 式,在第二方面的第三種實(shí)現(xiàn)方式中,還包括:
[0029]顯示單元,用于通過圖形化界面顯示所述檢測單元檢測到的所述執(zhí)行計(jì)劃的參數(shù)
信息;[0030]調(diào)整單元,用于根據(jù)參數(shù)信息修改指令調(diào)整所述顯示單元顯示的所述執(zhí)行計(jì)劃的 參數(shù)信息;
[0031]保存單元,用于將調(diào)整后的執(zhí)行計(jì)劃保存在所述客戶端的緩存中;
[0032]所述發(fā)送單元,還用于將所述調(diào)整單元調(diào)整后的執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù) 器。
[0033]結(jié)合第二方面或者第二方面的第一種實(shí)現(xiàn)方式,或者第二方面的第二種實(shí)現(xiàn)方 式,或者第二方面的第三種實(shí)現(xiàn)方式,在第二方面的第四種實(shí)現(xiàn)方式中,
[0034]所述接收單元,還用于當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶 端的緩存時,接收所述數(shù)據(jù)庫服務(wù)器發(fā)送的所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;
[0035]所述保存單元,還用于將所述接收單元接收的所述執(zhí)行計(jì)劃保存在所述客戶端的 緩存中。
[0036]結(jié)合第二方面或者第二方面的第一種實(shí)現(xiàn)方式,或者第二方面的第二種實(shí)現(xiàn)方 式,或者第二方面的第三種實(shí)現(xiàn)方式,或者第二方面的第四種實(shí)現(xiàn)方式,在第二方面的第五 種實(shí)現(xiàn)方式中,
[0037]所述生成單元,還用于當(dāng)所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì) 劃時,根據(jù)所述SQL請求,進(jìn)行哈希運(yùn)算生成所述位置信息。
[0038]第三方面,本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲方法,包括:
[0039]數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求,所述位置 信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為客戶端的緩存 和/或數(shù)據(jù)庫服務(wù)器的緩存;
[0040]所述數(shù)據(jù)庫服務(wù)器獲取所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;
[0041 ] 所述數(shù)據(jù)庫服務(wù)器根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置;
[0042]若所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存,所述數(shù)據(jù)庫 服務(wù)器將所述執(zhí)行計(jì)劃發(fā)送給所述客戶端進(jìn)行保存。
[0043]在第三方面的第一種實(shí)現(xiàn)方式中,在所述數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的位置信 息及結(jié)構(gòu)化查詢語言SQL請求之前,所述方法還包括:
[0044]若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接 收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃。
[0045]結(jié)合第三方面或者第三方面的第一種實(shí)現(xiàn)方式,在第三方面的第二種實(shí)現(xiàn)方式 中,所述若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接 收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃,具體包括:
[0046]若所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù) 器接收所述客戶端發(fā)送的從所述多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃,并且執(zhí)行所述 執(zhí)行計(jì)劃。
[0047]結(jié)合第三方面或者第三方面的第一種實(shí)現(xiàn)方式,或者第三方面的第二種實(shí)現(xiàn)方 式,在第三方面的第三種實(shí)現(xiàn)方式中,所述若所述客戶端的緩存中存在所述SQL請求對應(yīng) 的執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行 計(jì)劃,具體包括:
[0048]若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào)整,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的調(diào)整 后的執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃。
[0049]結(jié)合第三方面或者第三方面的第一種實(shí)現(xiàn)方式,或者第三方面的第二種實(shí)現(xiàn)方 式,或者第三方面的第三種實(shí)現(xiàn)方式,在第三方面的第四種實(shí)現(xiàn)方式中,在所述數(shù)據(jù)庫服務(wù) 器根據(jù)所述指定信息獲取所述執(zhí)行計(jì)劃的緩存位置之后,所述方法還包括:
[0050]若所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述數(shù)據(jù)庫服務(wù)器的緩存,所述 數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃保存在所述數(shù)據(jù)庫服務(wù)器的緩存中。
[0051]第四方面,本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲裝置,包括:
[0052]接收單元,用于接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求,所述位 置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為客戶端的緩 存和/或數(shù)據(jù)庫服務(wù)器的緩存;
[0053]獲取單元,用于根據(jù)所述接收單元接收的所述SQL請求,獲取所述SQL請求對應(yīng)的 執(zhí)行計(jì)劃;
[0054]所述獲取單元,還用于根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置;
[0055]發(fā)送單元,用于當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩 存時,所述數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃發(fā)送給所述客戶端進(jìn)行保存。
[0056]在第四方面的第一種實(shí)現(xiàn)方式中,所述接收單元,還用于當(dāng)所述客戶端的緩存中 存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時,接收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃;
[0057]所述裝置還包括:
[0058]執(zhí)行單元,用于執(zhí)行所述接收單元接收的所述執(zhí)行計(jì)劃。
[0059]結(jié)合第四方面或者第四方面的第一種實(shí)現(xiàn)方式,在第四方面的第二種實(shí)現(xiàn)方式 中,所述接收單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃 時,接收所述客戶端發(fā)送的從所述多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃;
[0060]所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述任意一個執(zhí)行計(jì)劃。
[0061]結(jié)合第四方面或者第四方面的第一種實(shí)現(xiàn)方式,或者第四方面的第二種實(shí)現(xiàn)方 式,在第四方面的第三種實(shí)現(xiàn)方式中,所述接收單元,還用于當(dāng)所述客戶端的緩存中存在所 述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào) 整時,接收所述客戶端發(fā)送的調(diào)整后的執(zhí)行計(jì)劃;
[0062]所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述調(diào)整后的執(zhí)行計(jì)劃。
[0063]結(jié)合第四方面或者第四方面的第一種實(shí)現(xiàn)方式,或者第四方面的第二種實(shí)現(xiàn)方 式,或者第四方面的第三種實(shí)現(xiàn)方式,在第四方面的第四種實(shí)現(xiàn)方式中,所述裝置還包括:
[0064]保存單元,用于當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述數(shù)據(jù)庫服務(wù) 器的緩存時,所述數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃保存在所述數(shù)據(jù)庫服務(wù)器的緩存中。
[0065]第五方面,本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲系統(tǒng),包括:至少一個客戶端和 數(shù)據(jù)庫服務(wù)器;
[0066]所述客戶端,用于接收結(jié)構(gòu)化查詢語言SQL請求,檢測在所述客戶端的緩存中是 否存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;
[0067]所述客戶端,還用于當(dāng)所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃 時,生成位置信息,并且將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為所述客戶端 的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存;
[0068]所述數(shù)據(jù)庫服務(wù)器,用于接收客戶端發(fā)送的所述位置信息及所述SQL請求,并根 據(jù)所述位置信息及所述SQL請求,獲取所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;
[0069]所述數(shù)據(jù)庫服務(wù)器,還用于根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置,當(dāng) 所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存時,將所述執(zhí)行計(jì)劃發(fā)送 給所述客戶端進(jìn)行保存。
[0070]本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲方法、裝置及系統(tǒng),客戶端將SQL請求及生 成的位置信息發(fā)送給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器根據(jù)接收到的SQL請求及位置信息,生 成并執(zhí)行SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且將該執(zhí)行計(jì)劃保存至位置信息指示的緩存中。與 現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例通過將客戶端執(zhí)行過的執(zhí)行計(jì)劃保存在該客戶端的緩存中, 可以避免部分執(zhí)行計(jì)劃無法被保存在緩存中,從而提高了執(zhí)行計(jì)劃的緩存命中率,進(jìn)而降 低了系統(tǒng)開銷。
【專利附圖】
【附圖說明】
[0071]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述 中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些 實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附 圖獲得其它的附圖。
[0072]圖1為本發(fā)明實(shí)施例一提供的一種執(zhí)行計(jì)劃的存儲方法流程圖;
[0073]圖2為本發(fā)明實(shí)施例一提供的一種執(zhí)行計(jì)劃的存儲結(jié)構(gòu)示意圖;
[0074]圖3為本發(fā)明實(shí)施例一提供的一種基站結(jié)構(gòu)示意圖;
[0075]圖4為本發(fā)明實(shí)施例二提供的一種執(zhí)行計(jì)劃的存儲方法流程圖;
[0076]圖5為本發(fā)明實(shí)施例二提供的一種執(zhí)行計(jì)劃的存儲結(jié)構(gòu)示意圖;
[0077]圖6為本發(fā)明實(shí)施例二提供的一種基站結(jié)構(gòu)示意圖;
[0078]圖7為本發(fā)明實(shí)施例三提供的一種執(zhí)行計(jì)劃的存儲系統(tǒng)示意圖。
【具體實(shí)施方式】
[0079]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0080]為使本發(fā)明技術(shù)方案的優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和實(shí)施例對本發(fā)明作詳細(xì)說 明。
[0081]實(shí)施例一
[0082]本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲方法,可以應(yīng)用于如圖7所示的系統(tǒng)中, 該系統(tǒng)包括至少一個客戶端和數(shù)據(jù)庫服務(wù)器,客戶端可以將SQL請求與生成的位置信息發(fā) 送給數(shù)據(jù)庫服務(wù)器,還可以接收數(shù)據(jù)庫服務(wù)器發(fā)送的SQL請求對應(yīng)的執(zhí)行計(jì)劃,并將該執(zhí) 行計(jì)劃保存在客戶端的緩存中;數(shù)據(jù)庫服務(wù)器可以接收客戶端發(fā)送的SQL請求與位置信息,還可以將生成的SQL請求對應(yīng)的執(zhí)行計(jì)劃發(fā)送給客戶端。其中,客戶端的緩存及數(shù)據(jù)庫 服務(wù)器的緩存中均可以保存SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0083]基于該系統(tǒng),本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲方法,如圖1所示,可應(yīng)用于客 戶端側(cè),所述方法包括:
[0084]101客戶端接收結(jié)構(gòu)化查詢語言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請求對應(yīng)的執(zhí)行計(jì)劃。
[0087]其中,SQL請求對應(yīng)的執(zhí)行計(jì)劃為SQL請求在數(shù)據(jù)庫系統(tǒng)中對應(yīng)的具體執(zhí)行過程。 上述客戶端的緩存中保存有已經(jīng)執(zhí)行并且指定進(jìn)行保存的執(zhí)行計(jì)劃。指定進(jìn)行保存的執(zhí)行 計(jì)劃具體可以為用戶指定的,也可以為數(shù)據(jù)庫服務(wù)器中預(yù)先配置的,本發(fā)明實(shí)施例不做限 定。
[0088]可選地,步驟102具體可以包括:對客戶端的緩存中保存的各個執(zhí)行計(jì)劃進(jìn)行逐 個查找,直到查找到所述SQL請求對應(yīng)的執(zhí)行計(jì)劃。優(yōu)選地,步驟102具體還可以包括:客 戶端首先建立哈希表Hash表,并在Hash表中保存各個執(zhí)行計(jì)劃在客戶端的緩存中的位置 信息,然后在Hash表中查找所述SQL請求對應(yīng)的執(zhí)行計(jì)劃在客戶端的緩存中的位置信息, 最后通過所述位置信息在客戶端的緩存中查找所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,從而提升了 SQL請求對應(yīng)的執(zhí)行計(jì)劃的查找效率。
[0089]103a、若客戶端的緩存中不存在SQL請求對應(yīng)的執(zhí)行計(jì)劃,客戶端根據(jù)SQL請求, 進(jìn)行哈希運(yùn)算生成位置信息。
[0090]其中,位置信息用于指示與SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置 為客戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存。對于本發(fā)明實(shí)施例,位置信息具體可以為提 示Hints指定。此時,當(dāng)Hints指定具體為PlanCacheServer時,指定執(zhí)行計(jì)劃保存到數(shù) 據(jù)庫服務(wù)器;當(dāng)Hints指定具體為PlanCacheClient時,指定執(zhí)行計(jì)劃保存到客戶端;當(dāng) Hints指定具體為PlanCacheAll時,指定執(zhí)行計(jì)劃保存到數(shù)據(jù)庫服務(wù)器和客戶端。若客戶 端沒有生成位置信息,則數(shù)據(jù)庫服務(wù)器默認(rèn)位置信息為PlanCacheAll,即指定將執(zhí)行計(jì)劃 保存到數(shù)據(jù)庫服務(wù)器和客戶端。
[0091]對于本發(fā)明實(shí)施例,客戶端根據(jù)SQL請求,可以進(jìn)行哈希運(yùn)算或者其他運(yùn)算生成 位置信息,本發(fā)明實(shí)施例不做限定。
[0092]通過SQL請求對應(yīng)的位置信息,可以實(shí)現(xiàn)根據(jù)用戶的需求來確定執(zhí)行計(jì)劃的緩存 位置,并且實(shí)現(xiàn)了在客戶端保存該客戶端已經(jīng)執(zhí)行的執(zhí)行計(jì)劃,避免由于數(shù)據(jù)庫服務(wù)器的 緩存空間有限,部分執(zhí)行計(jì)劃無法永久保存在數(shù)據(jù)庫服務(wù)器中,從而造成執(zhí)行計(jì)劃的緩存 命中率較低的問題。
[0093]步驟103a之后還包括步驟104a、客戶端將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務(wù) 器。
[0094]進(jìn)一步地,以使得數(shù)據(jù)庫服務(wù)器生成SQL請求對應(yīng)的執(zhí)行計(jì)劃,并根據(jù)位置信息 獲取執(zhí)行計(jì)劃的緩存位置后,保存執(zhí)行計(jì)劃。
[0095]其中,數(shù)據(jù)庫服務(wù)器生成SQL請求對應(yīng)的執(zhí)行計(jì)劃的步驟可以包括:數(shù)據(jù)庫服務(wù)器解析客戶端發(fā)送的SQL請求,并生成SQL請求對應(yīng)的執(zhí)行計(jì)劃。由于數(shù)據(jù)庫服務(wù)器解析 SQL請求并生成執(zhí)行計(jì)劃的過程很耗時,所以通過將全部執(zhí)行過的執(zhí)行計(jì)劃保存在客戶端 的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存中,可以提高執(zhí)行計(jì)劃的緩存命中率,避免由于當(dāng)前數(shù) 據(jù)庫服務(wù)器無法對全部執(zhí)行過的執(zhí)行計(jì)劃進(jìn)行保存,造成數(shù)據(jù)庫服務(wù)器對執(zhí)行過的SQL請 求重新解析并生成對應(yīng)的執(zhí)行計(jì)劃,從而降低系統(tǒng)的開銷。
[0096]對于本發(fā)明實(shí)施例,執(zhí)行計(jì)劃的緩存位置具體可以為數(shù)據(jù)庫服務(wù)器的緩存或客戶 端的緩存。由于客戶端執(zhí)行過的執(zhí)行計(jì)劃所占用的緩存較少,本發(fā)明實(shí)施例通過將客戶端 執(zhí)行過的全部執(zhí)行計(jì)劃或者部分執(zhí)行計(jì)劃保存在該客戶端的緩存中,不會造成客戶端的緩 存和數(shù)據(jù)庫服務(wù)器的緩存飽和,與目前將所有客戶端執(zhí)行過的全部執(zhí)行計(jì)劃保存在數(shù)據(jù)庫 服務(wù)器的緩存時,由于數(shù)據(jù)庫服務(wù)器的緩存飽和,造成部分執(zhí)行計(jì)劃無法進(jìn)行保存相比,提 高了執(zhí)行計(jì)劃的緩存命中率;同時,客戶端重啟后,客戶端的緩存中保存的執(zhí)行計(jì)劃仍會繼 續(xù)保存在客戶端的緩存中,從而避免保存在數(shù)據(jù)庫服務(wù)器中的執(zhí)行計(jì)劃在數(shù)據(jù)庫服務(wù)器重 啟時丟失。
[0097]與步驟103a并列的步驟103b、若客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃, 客戶端將執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0098]進(jìn)一步地,以使得數(shù)據(jù)庫服務(wù)器執(zhí)行SQL請求對應(yīng)的執(zhí)行計(jì)劃。對于本發(fā)明實(shí)施 例,當(dāng)客戶端的緩存中保存有已經(jīng)執(zhí)行過的執(zhí)行計(jì)劃時,數(shù)據(jù)庫服務(wù)器可以直接執(zhí)行該執(zhí) 行計(jì)劃,不需要再次解析該執(zhí)行計(jì)劃對應(yīng)的SQL請求以生成該執(zhí)行計(jì)劃,從而提高了 SQL請 求的執(zhí)行效率。
[0099]具體地,若客戶端的緩存中存在SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,則客戶端從多個 執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0100]其中,SQL請求通常對應(yīng)一個執(zhí)行計(jì)劃,但部分復(fù)雜的SQL請求會對應(yīng)有多個不同 的執(zhí)行計(jì)劃。若客戶端的緩存中保存有SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,此時,客戶端在多個 執(zhí)行計(jì)劃中任意選擇一個執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。優(yōu)選地,客戶端可以從多個執(zhí)行 計(jì)劃中選擇常用的或者執(zhí)行時間較短的執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0101]可選地,步驟103b之前還可以包括:客戶端通過圖形化界面顯示所述執(zhí)行計(jì)劃的 參數(shù)信息,然后客戶端根據(jù)參數(shù)信息修改指令調(diào)整所述執(zhí)行計(jì)劃的參數(shù)信息,并將調(diào)整后 的執(zhí)行計(jì)劃保存在所述客戶端的緩存中。此時客戶端將所述調(diào)整后的執(zhí)行計(jì)劃發(fā)送給所述 數(shù)據(jù)庫服務(wù)器。
[0102]其中,圖形化界面具體為在客戶端的屏幕上,通過文本框及箭頭顯示執(zhí)行計(jì)劃的 具體信息,并顯示執(zhí)行計(jì)劃對應(yīng)的各個參數(shù)信息,以便用戶更加直觀快速地進(jìn)行參數(shù)修改。 對于本發(fā)明實(shí)施例,未調(diào)整執(zhí)行計(jì)劃的參數(shù)信息時,數(shù)據(jù)庫服務(wù)器執(zhí)行該執(zhí)行計(jì)劃的過程 為系統(tǒng)默認(rèn)的過程,并非最優(yōu)過程,所以通過調(diào)整執(zhí)行計(jì)劃的參數(shù)信息,可以提高執(zhí)行計(jì)劃 在數(shù)據(jù)庫服務(wù)器中的執(zhí)行速度。調(diào)整后的執(zhí)行計(jì)劃作為SQL請求對應(yīng)的新增的執(zhí)行計(jì)劃保 存在客戶端的緩存中,不替換調(diào)整前的執(zhí)行計(jì)劃。
[0103]步驟104a之后還包括步驟105a、若位置信息指定執(zhí)行計(jì)劃的緩存位置為客戶端 的緩存,客戶端接收數(shù)據(jù)庫服務(wù)器發(fā)送的SQL請求對應(yīng)的執(zhí)行計(jì)劃,并保存在客戶端的緩 存中。
[0104]對于本發(fā)明實(shí)施例,由于可以將執(zhí)行過的執(zhí)行計(jì)劃保存在客戶端的緩存中,因此用戶可以通過將客戶端的緩存中保存的執(zhí)行計(jì)劃進(jìn)行復(fù)制、導(dǎo)入、導(dǎo)出等操作,可以實(shí)現(xiàn)在 不同的客戶端間共享執(zhí)行計(jì)劃。具體地,客戶端將緩存中的執(zhí)行計(jì)劃復(fù)制并以文件形式進(jìn) 行保存,此時其他客戶端可以獲取該執(zhí)行計(jì)劃的文件,并恢復(fù)在當(dāng)前客戶端的緩存中,從而 實(shí)現(xiàn)不同客戶端間共享執(zhí)行計(jì)劃。
[0105]進(jìn)一步地,作為圖1所示方法的具體實(shí)現(xiàn),本發(fā)明實(shí)施例提供了一種執(zhí)行計(jì)劃的 存儲裝置,如圖2所示,所述裝置的實(shí)體可以為客戶端,所述裝置包括:接收單元21、檢測單 元22、生成單元23、發(fā)送單元24。
[0106]接收單元21,用于接收結(jié)構(gòu)化查詢語言SQL請求。
[0107]檢測單元22,用于檢測在客戶端的緩存中是否存在接收單元21接收的SQL請求對 應(yīng)的執(zhí)行計(jì)劃。
[0108]生成單元23,用于當(dāng)客戶端的緩存中不存在檢測單元22檢測的SQL請求對應(yīng)的執(zhí) 行計(jì)劃時,生成位置信息。
[0109]其中,位置信息用于指示與SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存。
[0110]發(fā)送單元24,用于將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0111]發(fā)送單元24,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,將執(zhí)行 計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0112]發(fā)送單元24,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的多個執(zhí)行計(jì)劃時,從 多個執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0113]可選地,所述裝置還可以包括:顯示單元25、調(diào)整單元26、保存單元27。
[0114]顯示單元25,用于通過圖形化界面顯示檢測單元22檢測到的執(zhí)行計(jì)劃的參數(shù)信
肩、O
[0115]調(diào)整單元26,用于根據(jù)參數(shù)信息修改指令調(diào)整顯示單元25顯示的執(zhí)行計(jì)劃的參
數(shù)信息。
[0116]保存單元27,用于將調(diào)整后的執(zhí)行計(jì)劃保存在客戶端的緩存中。
[0117]發(fā)送單元24,還用于將調(diào)整單元26調(diào)整后的執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0118]接收單元21,還用于當(dāng)位置信息指定執(zhí)行計(jì)劃的緩存位置為客戶端的緩存時,接 收數(shù)據(jù)庫服務(wù)器發(fā)送的SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0119]保存單元27,還用于將接收單元21接收的執(zhí)行計(jì)劃保存在客戶端的緩存中。
[0120]生成單元23,還用于當(dāng)客戶端的緩存中不存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,根據(jù) SQL請求,進(jìn)行哈希運(yùn)算生成位置信息。
[0121]再進(jìn)一步地,所述執(zhí)行計(jì)劃的存儲裝置的實(shí)體可以為客戶端,如圖3所示,所述客 戶端可以包括:接收器31、處理器32、發(fā)送器33。
[0122]接收器31,用于接收結(jié)構(gòu)化查詢語言SQL請求。
[0123]處理器32,用于檢測在客戶端的緩存中是否存在SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0124]處理器32,還用于當(dāng)客戶端的緩存中不存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,生成位
置信息。
[0125]所述位置信息用于指示與SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,緩存位置為客戶 端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存。[0126]發(fā)送器33,用于將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0127]發(fā)送器33,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,將執(zhí)行計(jì) 劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0128]發(fā)送器33,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的多個執(zhí)行計(jì)劃時,從多 個執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0129]處理器32,還用于通過圖形化界面顯示執(zhí)行計(jì)劃的參數(shù)信息。
[0130]處理器32,還用于根據(jù)參數(shù)信息修改指令調(diào)整執(zhí)行計(jì)劃的參數(shù)信息。
[0131]處理器32,還用于將調(diào)整后的執(zhí)行計(jì)劃保存在客戶端的緩存中。
[0132]發(fā)送器33,還用于將執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。
[0133]接收器31,用于當(dāng)指定信息指定執(zhí)行計(jì)劃的緩存位置為客戶端的緩存時,接收數(shù) 據(jù)庫服務(wù)器發(fā)送的SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0134]處理器32,還用于將執(zhí)行計(jì)劃保存在客戶端的緩存中。
[0135]處理器32,還用于當(dāng)客戶端的緩存中不存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,根據(jù)SQL 請求,進(jìn)行哈希運(yùn)算生成位置信息。
[0136]需要說明的是,本發(fā)明實(shí)施例中提供的執(zhí)行計(jì)劃的存儲裝置中各功能單元所對應(yīng) 的其他相應(yīng)描述,可以參考圖1中的對應(yīng)描述,在此不再贅述。
[0137]本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲方法及裝置,客戶端將SQL請求及生成的位 置信息發(fā)送給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí) 行SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且將該執(zhí)行計(jì)劃保存至位置信息指示的緩存中。與現(xiàn)有技 術(shù)相比,本發(fā)明實(shí)施例通過將客戶端執(zhí)行過的執(zhí)行計(jì)劃保存在該客戶端的緩存中,可以避 免部分執(zhí)行計(jì)劃無法被保存在緩存中,從而提高了執(zhí)行計(jì)劃的緩存命中率,進(jìn)而降低了系 統(tǒng)開銷。
[0138]實(shí)施例二
[0139]本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲方法,可以應(yīng)用于如圖7所示的系統(tǒng)中, 該系統(tǒng)包括至少一個客戶端和數(shù)據(jù)庫服務(wù)器,客戶端可以將SQL請求與生成的位置信息發(fā) 送給數(shù)據(jù)庫服務(wù)器,還可以接收數(shù)據(jù)庫服務(wù)器發(fā)送的SQL請求對應(yīng)的執(zhí)行計(jì)劃,并將該執(zhí) 行計(jì)劃保存在客戶端的緩存中;數(shù)據(jù)庫服務(wù)器可以接收客戶端發(fā)送的SQL請求與位置信 息,還可以將生成的SQL請求對應(yīng)的執(zhí)行計(jì)劃發(fā)送給客戶端。其中,客戶端的緩存及數(shù)據(jù)庫 服務(wù)器的緩存中均可以保存SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0140]基于該系統(tǒng),本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲方法,如圖4所示,可應(yīng)用于數(shù) 據(jù)庫服務(wù)器側(cè),所述方法包括:
[0141]401、數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求。
[0142]可選地,步驟401之前還可以包括:若客戶端的緩存中存在客戶端發(fā)送的SQL請求 對應(yīng)的執(zhí)行計(jì)劃,數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的執(zhí)行計(jì)劃后,直接執(zhí)行該執(zhí)行計(jì)劃,不需 要再次解析該執(zhí)行計(jì)劃對應(yīng)的SQL請求以生成該執(zhí)行計(jì)劃,從而提高了 SQL請求的執(zhí)行效率。
[0143]具體地,若客戶端的緩存中存在SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,數(shù)據(jù)庫服務(wù)器接 收客戶端發(fā)送的從多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃,并且執(zhí)行該執(zhí)行計(jì)劃。
[0144]其中,SQL請求通常對應(yīng)一個執(zhí)行計(jì)劃,但部分復(fù)雜的SQL請求會對應(yīng)有多個不同的執(zhí)行計(jì)劃。若客戶端的緩存中保存有SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,此時,客戶端在多個 執(zhí)行計(jì)劃中選擇任意的一個執(zhí)行計(jì)劃發(fā)送給數(shù)據(jù)庫服務(wù)器。優(yōu)選地,數(shù)據(jù)庫服務(wù)器接收客 戶端發(fā)送的,從多個執(zhí)行計(jì)劃中選擇的常用的或者執(zhí)行時間較短的一個執(zhí)行計(jì)劃。
[0145]可替換地,若客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且客戶端通過圖 形化界面對執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào)整,數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的調(diào)整后的執(zhí)行計(jì)劃, 并且執(zhí)行該執(zhí)行計(jì)劃。
[0146]其中,圖形化界面具體為在客戶端的屏幕上,通過文本框及箭頭顯示執(zhí)行計(jì)劃的 具體信息,并顯示執(zhí)行計(jì)劃對應(yīng)的各個參數(shù)信息,以便用戶更加直觀快速地進(jìn)行參數(shù)修改。 對于本發(fā)明實(shí)施例,未調(diào)整執(zhí)行計(jì)劃的參數(shù)信息時,數(shù)據(jù)庫服務(wù)器執(zhí)行該執(zhí)行計(jì)劃的過程 為系統(tǒng)默認(rèn)的過程,并非最優(yōu)過程,所以通過調(diào)整執(zhí)行計(jì)劃的參數(shù)信息,可以提高執(zhí)行計(jì)劃 在數(shù)據(jù)庫服務(wù)器中的執(zhí)行速度。調(diào)整后的執(zhí)行計(jì)劃作為SQL請求對應(yīng)的新增的執(zhí)行計(jì)劃保 存在客戶端的緩存中,不替換調(diào)整前的執(zhí)行計(jì)劃。
[0147]對于本發(fā)明實(shí)施例中的數(shù)據(jù)庫服務(wù)器具體可以為數(shù)據(jù)庫數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫數(shù) 據(jù)庫服務(wù)器可以為用戶提供查詢、更新和管理等服務(wù)。
[0148]402、數(shù)據(jù)庫服務(wù)器獲取SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0149]本實(shí)施例中,步驟402具體可以為,數(shù)據(jù)庫服務(wù)器查找緩存中是否存在該SQL請求 對應(yīng)的執(zhí)行計(jì)劃,若數(shù)據(jù)庫服務(wù)器的緩存中存在該SQL請求對應(yīng)的執(zhí)行計(jì)劃,數(shù)據(jù)庫服務(wù) 器直接獲取該執(zhí)行計(jì)劃,以便數(shù)據(jù)庫服務(wù)器執(zhí)行該SQL請求對應(yīng)的執(zhí)行計(jì)劃;若數(shù)據(jù)庫服 務(wù)器的緩存中不存在該SQL請求對應(yīng)的執(zhí)行計(jì)劃,數(shù)據(jù)庫服務(wù)器對該SQL請求進(jìn)行解析,并 生成該SQL請求對應(yīng)的執(zhí)行計(jì)劃,以便數(shù)據(jù)庫服務(wù)器執(zhí)行該SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0150]403、數(shù)據(jù)庫服務(wù)器根據(jù)位置信息獲取執(zhí)行計(jì)劃的緩存位置。
[0151]其中,位置信息用于指示與SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存。對于本發(fā)明實(shí)施例,位置信息具體可以為Hints 指定。此時,當(dāng)Hints指定具體為PlanCacheServer時,指定執(zhí)行計(jì)劃保存到數(shù)據(jù)庫服務(wù)器 的緩存中;當(dāng)Hints指定具體為PlanCacheClient時,指定執(zhí)行計(jì)劃保存到客戶端的緩存 中;當(dāng)Hints指定具體為PlanCacheAll時,指定執(zhí)行計(jì)劃保存到數(shù)據(jù)庫服務(wù)器的緩存中和 客戶端的緩存中。若客戶端沒有生成SQL請求中需要攜帶的位置信息,則數(shù)據(jù)庫服務(wù)器默 認(rèn)位置信息為PlanCacheAll,即指定執(zhí)行計(jì)劃保存到數(shù)據(jù)庫服務(wù)器的緩存中和客戶端的緩 存中。
[0152]對于本發(fā)明實(shí)施例,客戶端根據(jù)SQL請求,可以進(jìn)行哈希運(yùn)算或者其他運(yùn)算生成 位置信息,本發(fā)明實(shí)施例不做限定。
[0153]通過SQL請求對應(yīng)的位置信息,可以實(shí)現(xiàn)根據(jù)用戶的需求來確定執(zhí)行計(jì)劃的緩存 位置,并且實(shí)現(xiàn)了在客戶端保存該客戶端已經(jīng)執(zhí)行的執(zhí)行計(jì)劃,避免由于數(shù)據(jù)庫服務(wù)器的 緩存空間有限,部分執(zhí)行計(jì)劃無法永久保存在數(shù)據(jù)庫服務(wù)器中,從而造成執(zhí)行計(jì)劃的緩存 命中率較低的問題。
[0154]404a、若位置信息指定執(zhí)行計(jì)劃的緩存位置為客戶端的緩存,數(shù)據(jù)庫服務(wù)器將執(zhí) 行計(jì)劃發(fā)送給客戶端進(jìn)行保存。
[0155]對于本發(fā)明實(shí)施例,由于客戶端的緩存中足夠存放該客戶端的全部執(zhí)行計(jì)劃,并 且客戶端的緩存中保存的執(zhí)行計(jì)劃不會因?yàn)榭蛻舳酥匦聠佣鴣G失,數(shù)據(jù)庫服務(wù)器通過將該執(zhí)行計(jì)劃發(fā)送給客戶端進(jìn)行保存,可以保證全部執(zhí)行計(jì)劃永久保存在該客戶端的緩存 中,從而提高執(zhí)行計(jì)劃的緩存命中率;同時,由于客戶端的全部執(zhí)行計(jì)劃能夠永久存放在客 戶端的緩存中,所以數(shù)據(jù)庫服務(wù)器再次接收該SQL請求時,不需要再次解析SQL請求并生成 該SQL請求對應(yīng)的執(zhí)行計(jì)劃,從而可以降低系統(tǒng)開銷。
[0156]與步驟404a并列的步驟404b、若位置信息指定執(zhí)行計(jì)劃的緩存位置為數(shù)據(jù)庫服 務(wù)器的緩存,數(shù)據(jù)庫服務(wù)器將執(zhí)行計(jì)劃保存在數(shù)據(jù)庫服務(wù)器的緩存中。
[0157]與步驟404a和步驟404b并列的步驟404c、若位置信息指定執(zhí)行計(jì)劃的緩存位 置為客戶端的緩存和數(shù)據(jù)庫服務(wù)器的緩存,數(shù)據(jù)庫服務(wù)器將執(zhí)行計(jì)劃發(fā)送給客戶端進(jìn)行保 存,并且將執(zhí)行計(jì)劃保存在數(shù)據(jù)庫服務(wù)器的緩存中。
[0158]對于本發(fā)明實(shí)施例,將某一個客戶端的SQL請求對應(yīng)的執(zhí)行計(jì)劃同時保存在客戶 端的緩存和數(shù)據(jù)庫服務(wù)器的緩存中,能夠提高該SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存命中率, 同時,通過將該SQL請求對應(yīng)的執(zhí)行計(jì)劃保存在數(shù)據(jù)庫服務(wù)器的緩存中,從而使得當(dāng)其他 客戶端發(fā)送該SQL請求給數(shù)據(jù)庫服務(wù)器時,數(shù)據(jù)庫服務(wù)器也能夠直接查找到該SQL請求對 應(yīng)的執(zhí)行計(jì)劃并進(jìn)行執(zhí)行,從而提高了執(zhí)行計(jì)劃的執(zhí)行效率。
[0159]進(jìn)一步地,作為圖4所示方法的具體實(shí)現(xiàn),本發(fā)明實(shí)施例提供了一種執(zhí)行計(jì)劃的 存儲裝置,如圖5所示,所述裝置的實(shí)體可以為數(shù)據(jù)庫服務(wù)器,所述裝置包括:接收單元51、 獲取單元52、發(fā)送單元53。
[0160]接收單元51,用于接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求。
[0161]其中,位置信息用于指示與SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存。
[0162]獲取單元52,用于根據(jù)接收單元51接收的SQL請求,獲取SQL請求對應(yīng)的執(zhí)行計(jì) 劃。
[0163]獲取單元52,還用于根據(jù)位置信息獲取執(zhí)行計(jì)劃的緩存位置。
[0164]發(fā)送單元53,用于當(dāng)位置信息指定執(zhí)行計(jì)劃的緩存位置為客戶端的緩存時,數(shù)據(jù) 庫服務(wù)器將執(zhí)行計(jì)劃發(fā)送給客戶端進(jìn)行保存。
[0165]接收單元51,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,接收客 戶端發(fā)送的執(zhí)行計(jì)劃。
[0166]可選地,所述裝置還可以包括:執(zhí)行單元54。
[0167]執(zhí)行單元54,用于執(zhí)行接收單元51接收的執(zhí)行計(jì)劃。
[0168]接收單元51,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的多個執(zhí)行計(jì)劃時,接 收客戶端發(fā)送的從多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃。
[0169]執(zhí)行單元54,還用于執(zhí)行接收單元51接收的該任意一個執(zhí)行計(jì)劃。
[0170]接收單元51,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且客戶 端通過圖形化界面對執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào)整時,接收客戶端發(fā)送的調(diào)整后的執(zhí)行計(jì)劃。
[0171]執(zhí)行單元54,還用于執(zhí)行接收單元51接收的調(diào)整后的執(zhí)行計(jì)劃。
[0172]可選地,所述裝置還可以包括保存單元55。
[0173]保存單元55,用于當(dāng)位置信息指定執(zhí)行計(jì)劃的緩存位置為數(shù)據(jù)庫服務(wù)器的緩存 時,數(shù)據(jù)庫服務(wù)器將執(zhí)行計(jì)劃保存在數(shù)據(jù)庫服務(wù)器的緩存中。
[0174]再進(jìn)一步地,所述執(zhí)行計(jì)劃的存儲裝置的實(shí)體可以為數(shù)據(jù)庫服務(wù)器,如圖6所示,所述數(shù)據(jù)庫服務(wù)器可以包括:接收器61、處理器62、發(fā)送器63。
[0175]接收器61,用于接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求。
[0176]其中,位置信息用于指示與SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,緩存位置為客 戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存。
[0177]處理器62,用于根據(jù)SQL請求,獲取SQL請求對應(yīng)的執(zhí)行計(jì)劃。
[0178]處理器62,還用于根據(jù)位置信息獲取執(zhí)行計(jì)劃的緩存位置。
[0179]發(fā)送器63,用于當(dāng)位置信息指定執(zhí)行計(jì)劃的緩存位置為客戶端的緩存時,數(shù)據(jù)庫 服務(wù)器將執(zhí)行計(jì)劃發(fā)送給客戶端進(jìn)行保存。
[0180]接收器61,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,接收客戶 端發(fā)送的執(zhí)行計(jì)劃。
[0181]處理器62,還用于執(zhí)行該執(zhí)行計(jì)劃。
[0182]接收器61,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的多個執(zhí)行計(jì)劃時,接收 客戶端發(fā)送的從多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃。
[0183]處理器62,還用于執(zhí)行該任意一個執(zhí)行計(jì)劃。
[0184]接收器61,還用于當(dāng)客戶端的緩存中存在SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且客戶端 通過圖形化界面對執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào)整時,接收客戶端發(fā)送的調(diào)整后的執(zhí)行計(jì)劃。
[0185]處理器62,還用于執(zhí)行調(diào)整后的執(zhí)行計(jì)劃。
[0186]處理器62,還用于當(dāng)位置信息指定執(zhí)行計(jì)劃的緩存位置為數(shù)據(jù)庫服務(wù)器的緩存 時,數(shù)據(jù)庫服務(wù)器將執(zhí)行計(jì)劃保存在數(shù)據(jù)庫服務(wù)器的緩存中。
[0187]需要說明的是,本發(fā)明實(shí)施例中提供的執(zhí)行計(jì)劃的存儲裝置中各功能單元所對應(yīng) 的其他相應(yīng)描述,可以參考圖4中的對應(yīng)描述,在此不再贅述。
[0188]本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲方法及裝置,客戶端將SQL請求及生成的位 置信息發(fā)送給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí) 行SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且將該執(zhí)行計(jì)劃保存至位置信息指示的緩存中。與現(xiàn)有技 術(shù)相比,本發(fā)明實(shí)施例通過將客戶端執(zhí)行過的執(zhí)行計(jì)劃保存在該客戶端的緩存中,可以避 免部分執(zhí)行計(jì)劃無法被保存在緩存中,從而提高了執(zhí)行計(jì)劃的緩存命中率,進(jìn)而降低了系 統(tǒng)開銷。
[0189]實(shí)施例三
[0190]本發(fā)明實(shí)施例提供一種執(zhí)行計(jì)劃的存儲系統(tǒng),如圖7所示,所述系統(tǒng)包括:至少一 個客戶端71和數(shù)據(jù)庫服務(wù)器72。
[0191]客戶端71,用于首先獲取結(jié)構(gòu)化查詢語言SQL請求,然后在緩存中檢測是否存在 SQL請求對應(yīng)的執(zhí)行計(jì)劃,當(dāng)緩存中不存在SQL請求對應(yīng)的執(zhí)行計(jì)劃時,生成位置信息,并 且將位置信息及SQL請求發(fā)送給數(shù)據(jù)庫服務(wù)器72。
[0192]數(shù)據(jù)庫服務(wù)器72,用于首先接收客戶端71發(fā)送的位置信息及SQL請求,然后根據(jù) SQL請求,獲取SQL請求對應(yīng)的執(zhí)行計(jì)劃,最后根據(jù)位置信息獲取執(zhí)行計(jì)劃的緩存位置,若 位置信息指定執(zhí)行計(jì)劃的緩存位置為客戶端71的緩存,將執(zhí)行計(jì)劃發(fā)送給客戶端71進(jìn)行保存。
[0193]本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲系統(tǒng),客戶端將SQL請求及生成的位置信息 發(fā)送給數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫服務(wù)器根據(jù)接收到的SQL請求及位置信息,生成并執(zhí)行SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且將該執(zhí)行計(jì)劃保存至位置信息指示的緩存中。與目前數(shù)據(jù)庫服務(wù) 器進(jìn)行執(zhí)行計(jì)劃的保存時,通過為不同客戶端在數(shù)據(jù)庫服務(wù)器中分別配置緩存區(qū),以保存 不同的客戶端對應(yīng)的執(zhí)行計(jì)劃相比,本發(fā)明實(shí)施例通過將客戶端執(zhí)行過的執(zhí)行計(jì)劃保存在 該客戶端的緩存中,可以避免部分執(zhí)行計(jì)劃無法被保存在緩存中,從而提高了執(zhí)行計(jì)劃的 緩存命中率,進(jìn)而降低了系統(tǒng)開銷。
[0194]本發(fā)明實(shí)施例提供的方法、裝置及系統(tǒng)還可以用于解決單機(jī)數(shù)據(jù)庫、雙機(jī)數(shù)據(jù)庫 及集群數(shù)據(jù)庫中存在的一些問題。
[0195]例如,在單機(jī)數(shù)據(jù)庫的場景下,單機(jī)數(shù)據(jù)庫服務(wù)器的緩存中不足以存放各個客戶 端對應(yīng)的全部執(zhí)行計(jì)劃,通過本發(fā)明實(shí)施例提供的方法,可以將需要在單機(jī)數(shù)據(jù)庫服務(wù)器 的緩存中保存的執(zhí)行計(jì)劃保存在單機(jī)數(shù)據(jù)庫服務(wù)器對應(yīng)的各個客戶端的緩存中,從而減小 了單機(jī)數(shù)據(jù)庫服務(wù)器的緩存中執(zhí)行計(jì)劃所占用的緩存空間。
[0196]在雙機(jī)數(shù)據(jù)庫的場景下,由于雙機(jī)數(shù)據(jù)庫服務(wù)器將執(zhí)行計(jì)劃隨機(jī)的保存在兩個數(shù) 據(jù)庫中的某一個數(shù)據(jù)庫中,當(dāng)客戶端發(fā)起某一個SQL請求時,雙機(jī)數(shù)據(jù)庫服務(wù)器就需要查 找兩個數(shù)據(jù)庫中的全部執(zhí)行計(jì)劃,因此在雙機(jī)數(shù)據(jù)庫場景下,對SQL請求對應(yīng)的執(zhí)行計(jì)劃 的查找復(fù)雜度較高。通過本發(fā)明實(shí)施例提供的方法,可以將執(zhí)行過的SQL請求對應(yīng)的執(zhí)行 計(jì)劃保存在客戶端的緩存中,當(dāng)客戶端發(fā)起一個SQL請求時,可以直接從客戶端的緩存中 獲取該請求對應(yīng)的執(zhí)行計(jì)劃,從而避免雙機(jī)數(shù)據(jù)庫服務(wù)器查找兩個數(shù)據(jù)庫中的全部執(zhí)行計(jì) 劃,進(jìn)而降低雙機(jī)數(shù)據(jù)庫服務(wù)器的查找復(fù)雜度。
[0197]同樣的,在集群數(shù)據(jù)庫的場景下,由于集群數(shù)據(jù)庫服務(wù)器將執(zhí)行計(jì)劃隨機(jī)的保存 在多個數(shù)據(jù)庫中的某一個數(shù)據(jù)庫中,當(dāng)客戶端發(fā)起某一個SQL請求時,集群數(shù)據(jù)庫服務(wù)器 就需要查找各個數(shù)據(jù)庫中的全部執(zhí)行計(jì)劃,因此在集群數(shù)據(jù)庫場景下的SQL請求對應(yīng)的執(zhí) 行計(jì)劃的查找復(fù)雜度高。通過本發(fā)明實(shí)施例提供的方法,可以將執(zhí)行過的SQL請求對應(yīng)的 執(zhí)行計(jì)劃保存在客戶端的緩存中,當(dāng)客戶端發(fā)起一個SQL請求時,可以直接從客戶端的緩 存中獲取該請求對應(yīng)的執(zhí)行計(jì)劃,從而避免集群數(shù)據(jù)庫服務(wù)器查找各個數(shù)據(jù)庫中的全部執(zhí) 行計(jì)劃,進(jìn)而降低集群數(shù)據(jù)庫服務(wù)器的查找復(fù)雜度。
[0198]本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存儲裝置可以實(shí)現(xiàn)上述提供的方法實(shí)施例,具體 功能實(shí)現(xiàn)請參見方法實(shí)施例中的說明,在此不再贅述。本發(fā)明實(shí)施例提供的執(zhí)行計(jì)劃的存 儲方法、裝置及系統(tǒng)可以適用于提高執(zhí)行計(jì)劃的緩存命中率,減少系統(tǒng)開銷,但不僅限于 此。
[0199]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì) 中,該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁 碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體(Random Access Memory, RAM)等。
[0200]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng) 涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種執(zhí)行計(jì)劃的存儲方法,其特征在于,包括:客戶端接收結(jié)構(gòu)化查詢語言SQL請求;所述客戶端檢測在所述客戶端的緩存中是否存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃; 若所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端生成位置信息,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存;所述客戶端將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得所述數(shù)據(jù)庫服務(wù)器生成所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并將所述執(zhí)行計(jì)劃保存到所述位置信息指示的緩存中。
2.根據(jù)權(quán)利要求1所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,還包括:若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得所述數(shù)據(jù)庫服務(wù)器執(zhí)行所述執(zhí)行計(jì)劃。
3.根據(jù)權(quán)利要求2所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,所述若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器,以使得所述數(shù)據(jù)庫服務(wù)器執(zhí)行所述執(zhí)行計(jì)劃,具體包括:若所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,則所述客戶端從所述多個執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
4.根據(jù)權(quán)利要求2所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,在所述客戶端將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器之前,所述方法還包括:所述客戶端通過圖形化界面顯示 所述執(zhí)行計(jì)劃的參數(shù)信息;所述客戶端根據(jù)參數(shù)信息修改指令調(diào)整所述執(zhí)行計(jì)劃的參數(shù)信息,并將調(diào)整后的執(zhí)行計(jì)劃保存在所述客戶端的緩存中;所述客戶端將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器的步驟包括:所述客戶端將所述調(diào)整后的執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
5.根據(jù)權(quán)利要求1所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,在所述客戶端將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器之后,所述方法還包括:若所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存,所述客戶端接收所述數(shù)據(jù)庫服務(wù)器發(fā)送的所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并保存在所述客戶端的緩存中。
6.根據(jù)權(quán)利要求1所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,所述若所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端生成位置信息,具體包括:若所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述客戶端根據(jù)所述 SQL請求,進(jìn)行哈希運(yùn)算生成所述位置信息。
7.一種執(zhí)行計(jì)劃的存儲方法,其特征在于,包括:數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為客戶端的緩存和/ 或所述數(shù)據(jù)庫服務(wù)器的緩存;所述數(shù)據(jù)庫服務(wù)器獲取所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;所述數(shù)據(jù)庫服務(wù)器根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置;若所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存,所述數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃發(fā)送給所述客戶端進(jìn)行保存。
8.根據(jù)權(quán)利要求7所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,在所述數(shù)據(jù)庫服務(wù)器接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求之前,所述方法還包括:若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃。
9.根據(jù)權(quán)利要求8所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,所述若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃,具體包括:若所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的從所述多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃。
10.根據(jù)權(quán)利要求8所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,所述若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃,具體包括:若所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào)整,所述數(shù)據(jù)庫服務(wù)器接收所述客戶端發(fā)送的調(diào)整后的執(zhí)行計(jì)劃,并且執(zhí)行所述執(zhí)行計(jì)劃。
11.根據(jù)權(quán)利要求7所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,在所述數(shù)據(jù)庫服務(wù)器根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置之后,所述方法還包括:若所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述數(shù)據(jù)庫服務(wù)器的緩存,所述數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃保存在所述數(shù)據(jù)庫服務(wù)器的緩存中。
12.—種執(zhí)行計(jì)劃的存儲裝置,其特征在于,包括:接收單元,用于接收結(jié)構(gòu)化·查詢語言SQL請求;檢測單元,用于檢測在所述客戶端的緩存中是否存在所述接收單元接收的所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;生成單元,用于當(dāng)所述客戶端的緩存中不存在所述檢測單元檢測的所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時,生成位置信息,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存;發(fā)送單元,用于將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
13.根據(jù)權(quán)利要求12所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述發(fā)送單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時, 將所述執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
14.根據(jù)權(quán)利要求13所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述發(fā)送單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃時,從所述多個執(zhí)行計(jì)劃中選擇任意一個執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
15.根據(jù)權(quán)利要求13所述的執(zhí)行計(jì)劃的存儲方法,其特征在于,所述裝置還包括:顯示單元,用于通過圖形化界面顯示所述檢測單元檢測到的所述執(zhí)行計(jì)劃的參數(shù)信息;調(diào)整單元,用于根據(jù)參數(shù)信息修改指令調(diào)整所述顯示單元顯示的所述執(zhí)行計(jì)劃的參數(shù)信息;保存單元,用于將調(diào)整后的執(zhí)行計(jì)劃保存在所述客戶端的緩存中;所述發(fā)送單元,還用于將所述調(diào)整單元調(diào)整后的執(zhí)行計(jì)劃發(fā)送給所述數(shù)據(jù)庫服務(wù)器。
16.根據(jù)權(quán)利要求12所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述接收單元,還用于當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存時,接收所述數(shù)據(jù)庫服務(wù)器發(fā)送的所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;所述保存單元,還用于將所述接收單元接收的所述執(zhí)行計(jì)劃保存在所述客戶端的緩存中。
17.根據(jù)權(quán)利要求12所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述生成單元,還用于當(dāng)所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時,根據(jù)所述SQL請求,進(jìn)行哈希運(yùn)算生成所述位置信息。
18.一種執(zhí)行計(jì)劃的存儲裝置,其特征在于,包括:接收單元,用于接收客戶端發(fā)送的位置信息及結(jié)構(gòu)化查詢語言SQL請求,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為客戶端的緩存和 /或數(shù)據(jù)庫服務(wù)器的緩存;獲取單元,用于根據(jù)所述接收單元接收的所述SQL請求,獲取所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;所述獲取單元,還用于根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置;發(fā)送單元,用于當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存時,所述數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃發(fā)送給所述客戶端進(jìn)行保存。
19.根據(jù)權(quán)利要求18所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述接收單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時, 接收所述客戶端發(fā)送的所述執(zhí)行計(jì)劃;所述裝置還包括:執(zhí)行單元,用于執(zhí)行所述接收單元接收的所述執(zhí)行計(jì)劃。
20.根據(jù)權(quán)利要求19所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述接收單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的多個執(zhí)行計(jì)劃時,接收所述客戶端發(fā)送的從所述多個執(zhí)行計(jì)劃中選擇的任意一個執(zhí)行計(jì)劃;所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述任意一個執(zhí)行計(jì)劃。
21.根據(jù)權(quán)利要求19所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述接收單元,還用于當(dāng)所述客戶端的緩存中存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃,并且所述客戶端通過圖形化界面對所述執(zhí)行計(jì)劃進(jìn)行參數(shù)調(diào)整時,接收所述客戶端發(fā)送的調(diào)整后的執(zhí)行計(jì)劃;所述執(zhí)行單元,還用于執(zhí)行所述接收單元接收的所述調(diào)整后的執(zhí)行計(jì)劃。
22.根據(jù)權(quán)利要求18所述的執(zhí)行計(jì)劃的存儲裝置,其特征在于,所述裝置還包括:保存單元,用于當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述數(shù)據(jù)庫服務(wù)器的緩存時,所述數(shù)據(jù)庫服務(wù)器將所述執(zhí)行計(jì)劃保存在所述數(shù)據(jù)庫服務(wù)器的緩存中。
23.一種執(zhí)行計(jì)劃的存儲系統(tǒng),其特征在于,包括:至少一個客戶端和數(shù)據(jù)庫服務(wù)器; 所述客戶端,用于接收結(jié)構(gòu)化查詢語言SQL請求,檢測在所述客戶端的緩存中是否存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;所述客戶端,還用于當(dāng)所述客戶端的緩存中不存在所述SQL請求對應(yīng)的執(zhí)行計(jì)劃時, 生成位置信息,并且將所述位置信息及所述SQL請求發(fā)送給所述數(shù)據(jù)庫服務(wù)器,所述位置信息用于指示與所述SQL請求對應(yīng)的執(zhí)行計(jì)劃的緩存位置,所述緩存位置為所述客戶端的緩存和/或數(shù)據(jù)庫服務(wù)器的緩存;所述數(shù)據(jù)庫服務(wù)器,用于接收客戶端發(fā)送的所述位置信息及所述SQL請求,并根據(jù)所述位置信息及所述SQL請求,獲取所述SQL請求對應(yīng)的執(zhí)行計(jì)劃;所述數(shù)據(jù)庫服務(wù)器,還用于根據(jù)所述位置信息獲取所述執(zhí)行計(jì)劃的緩存位置,當(dāng)所述位置信息指定所述執(zhí)行計(jì)劃的緩存位置為所述客戶端的緩存時,將所述執(zhí)行計(jì)劃發(fā)送給所述客戶端進(jìn)行保存。
【文檔編號】G06F17/30GK103577561SQ201310507367
【公開日】2014年2月12日 申請日期:2013年10月24日 優(yōu)先權(quán)日:2013年10月24日
【發(fā)明者】于巍, 文繼軍, 劉輝軍 申請人:華為技術(shù)有限公司