1. 磁盤(pán)
1.1 seq_page_cost
描述:順序磁盤(pán)訪問(wèn)時(shí)單個(gè)頁(yè)面的讀取開(kāi)銷(xiāo)住闯,默認(rèn)為1.0
場(chǎng)景說(shuō)明:在磁盤(pán)關(guān)系型數(shù)據(jù)庫(kù)的代價(jià)估算模型中换途,假定順序訪問(wèn)磁盤(pán)的開(kāi)銷(xiāo)為1,再給出其他操作的相對(duì)開(kāi)銷(xiāo)写穴。
1.2 random_page_cost
描述:隨機(jī)磁盤(pán)訪問(wèn)時(shí)單個(gè)頁(yè)面的讀取開(kāi)銷(xiāo)币喧,默認(rèn)為4.0
場(chǎng)景說(shuō)明:默認(rèn)情況下,隨機(jī)IO和順序IO的代價(jià)是4:1的關(guān)系侠坎,這主要是針對(duì)于傳統(tǒng)的HDD而言的。對(duì)于當(dāng)前廣泛使用的SSD裙盾,該代價(jià)可能需要調(diào)整实胸。
2. 處理器
2.1 cpu_tuple_cost
描述:處理每個(gè)元組的處理器開(kāi)銷(xiāo),默認(rèn)為0.01番官。對(duì)于一個(gè)頁(yè)面中的元組庐完,需要解析其中的字段,進(jìn)行投影組裝出新的元組
2.2 cpu_index_tuple_cost
描述:處理每個(gè)索引元組的處理器開(kāi)銷(xiāo)徘熔,默認(rèn)為0.005
2.3 cpu_operator_cost
描述:處理每個(gè)運(yùn)算符或者函數(shù)調(diào)用的處理器開(kāi)銷(xiāo)门躯,默認(rèn)為0.0025
場(chǎng)景說(shuō)明:默認(rèn)情況下,順序IO和元組處理的代價(jià)是100:1的關(guān)系酷师,這主要是針對(duì)于傳統(tǒng)的HDD和一般的處理器而言的讶凉。對(duì)于磁陣染乌、SSD等存儲(chǔ)設(shè)備,或者頻率較高的處理器懂讯,該代價(jià)比例可能需要調(diào)整慕匠。
3. 內(nèi)存、磁盤(pán)
3.1 effective_cache_size
描述:在一次索引掃描中可用的文件系統(tǒng)內(nèi)核緩沖區(qū)的有效大小
場(chǎng)景說(shuō)明:該參數(shù)當(dāng)前只用在估計(jì)索引掃描的磁盤(pán)IO開(kāi)銷(xiāo)域醇,用于計(jì)算一次索引掃描需要訪問(wèn)的所有頁(yè)面在內(nèi)核緩沖區(qū)中已經(jīng)存在的頁(yè)面數(shù)台谊。該參數(shù)的值越大,計(jì)算出的索引掃描的開(kāi)銷(xiāo)也越小譬挚。
3.2 work_mem
描述:進(jìn)行內(nèi)部排序操作和哈希操作的工作空間锅铅,在開(kāi)始使用臨時(shí)的磁盤(pán)文件之前可用的內(nèi)存大小
場(chǎng)景說(shuō)明:該參數(shù)會(huì)用來(lái)估計(jì)排序和哈希操作的磁盤(pán)IO開(kāi)銷(xiāo),用于計(jì)算一次排序或哈希需要處理的所有數(shù)據(jù)可以緩存在內(nèi)存中的數(shù)據(jù)量减宣。該參數(shù)的值越大盐须,計(jì)算出的排序或哈希的開(kāi)銷(xiāo)也越小。
4. 統(tǒng)計(jì)信息
4.1 表相關(guān)的統(tǒng)計(jì)信息
描述:數(shù)據(jù)特征:堆表中的頁(yè)面數(shù)漆腌、元組數(shù)贼邓,索引中的頁(yè)面數(shù),子句選擇率等闷尿。ANALYZE操作會(huì)收集這些統(tǒng)計(jì)信息塑径,然后把結(jié)果保存到系統(tǒng)表pg_statistic和pg_class里。在系統(tǒng)表pg_statistic中填具,記錄了每個(gè)表內(nèi)容的統(tǒng)計(jì)信息统舀,如一個(gè)表中某個(gè)字段的平均字節(jié)數(shù)、空值占比等劳景,通過(guò)這些信息可以計(jì)算出某個(gè)條件表達(dá)式匹配的記錄數(shù)目誉简。
場(chǎng)景說(shuō)明:系統(tǒng)中的autovacuum進(jìn)程會(huì)周期性地運(yùn)行ANALYZE操作,進(jìn)行統(tǒng)計(jì)信息的收集盟广。 頻繁刪改操作會(huì)引起數(shù)據(jù)發(fā)生膨脹闷串,批量插入會(huì)使得數(shù)據(jù)量迅速增長(zhǎng),這些情況都會(huì)出現(xiàn)統(tǒng)計(jì)信息的變化筋量,最終引起查詢(xún)的執(zhí)行計(jì)劃發(fā)生變化烹吵,這時(shí)候性能很容易出現(xiàn)突變。
5. 總結(jié)
在查詢(xún)的規(guī)劃階段毛甲,規(guī)劃器會(huì)根據(jù)查詢(xún)語(yǔ)法樹(shù)創(chuàng)建出所有可能的執(zhí)行路徑年叮,計(jì)算出不同路徑的執(zhí)行開(kāi)銷(xiāo)具被,并選擇出總體開(kāi)銷(xiāo)最小的執(zhí)行路徑玻募。每個(gè)路徑的執(zhí)行開(kāi)銷(xiāo)就是通過(guò)上表的信息計(jì)算出來(lái)的,主要包括磁盤(pán)IO的開(kāi)銷(xiāo)一姿、處理器的開(kāi)銷(xiāo)等七咧。
因?yàn)樯厦娴男畔⒑同F(xiàn)實(shí)情況一般都會(huì)存在差別跃惫,而且實(shí)際運(yùn)行過(guò)程中可能還會(huì)存在其他的開(kāi)銷(xiāo)(如資源的爭(zhēng)用),所以估算出來(lái)的開(kāi)銷(xiāo)不一定非常準(zhǔn)確艾栋,最終選擇出來(lái)的執(zhí)行路徑也不一定就是總體開(kāi)銷(xiāo)最小的爆存。