如何開(kāi)始優(yōu)化數(shù)據(jù)庫(kù),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供呼圖壁網(wǎng)站建設(shè)、呼圖壁做網(wǎng)站、呼圖壁網(wǎng)站設(shè)計(jì)、呼圖壁網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、呼圖壁企業(yè)網(wǎng)站模板建站服務(wù),十載呼圖壁做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
對(duì)于數(shù)據(jù)庫(kù)的調(diào)優(yōu), 可以從以下幾個(gè)方面來(lái)考慮, 硬件的配置, 網(wǎng)絡(luò)的配置, 數(shù)據(jù)庫(kù)的配置, SQL 撰寫(xiě)和解讀的方式, 索引的維護(hù)等等問(wèn)題.去入手, 下面僅僅對(duì)數(shù)據(jù)庫(kù)配置和SQL的rewrite進(jìn)行相關(guān)調(diào)優(yōu)的講解.
通常來(lái)說(shuō)調(diào)整數(shù)據(jù)庫(kù)性能需要系統(tǒng)性的知識(shí), 例如你要知道數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)的對(duì)象是在線分析系統(tǒng)還是在線事務(wù)系統(tǒng),這對(duì)于硬件系統(tǒng)提供的IO CPU 都是有不同的需求的,例如你是要多少CPU, RAID設(shè)置的方式, 多大容量的內(nèi)存,以及數(shù)據(jù)庫(kù)的設(shè)置問(wèn)題等等.當(dāng)然可以通過(guò)PGBANCH來(lái)對(duì)數(shù)據(jù)庫(kù)的TPS 進(jìn)行一個(gè)測(cè)試.
而第二部對(duì)于數(shù)據(jù)庫(kù)的優(yōu)化就要在數(shù)據(jù)庫(kù)的運(yùn)行后,在開(kāi)始,在這個(gè)階段需要對(duì)系統(tǒng)進(jìn)行一個(gè)觀察和監(jiān)測(cè)例如你可以使用pgbadger監(jiān)控工具對(duì)于系統(tǒng)進(jìn)行整體的監(jiān)控,或者powa和pg_stat_statements 對(duì)于數(shù)據(jù)庫(kù)進(jìn)行問(wèn)題的查找,找到瓶頸和慢查詢(xún)等信息.
分析的首要要點(diǎn)就是對(duì)于慢查詢(xún)的分析,一個(gè)較慢的較差的SQL, 就需要重寫(xiě)除此以外缺失的索引應(yīng)該被創(chuàng)建,數(shù)據(jù)庫(kù)的配置應(yīng)該被重設(shè),物理結(jié)構(gòu)應(yīng)該被重構(gòu)等等.
下面就要開(kāi)始對(duì)數(shù)據(jù)庫(kù)的configuration 進(jìn)行調(diào)試.
對(duì)于數(shù)據(jù)庫(kù)的最大連接數(shù)在數(shù)據(jù)庫(kù)的配置中是非常重要的事情, 默認(rèn)max_ connections設(shè)置的默認(rèn)值是100,如果設(shè)置的值較低,可以適當(dāng)提高work_mem的配置值.
在POSTGRESQL中,通常會(huì)使用連接池來(lái)提高系統(tǒng)性能降低內(nèi)存的浪費(fèi),并且降低由于連接killing和重建連接鎖消耗的時(shí)間.
常用的兩種連接池軟件
pgbouncer
pgpool-II
當(dāng)然在商業(yè)等級(jí)中連接池也可以使用類(lèi)似JAVA的 connection-pooling 或者 C3P0 等等.
以下的幾個(gè)設(shè)置是關(guān)于內(nèi)存的設(shè)定的
共享緩沖區(qū)(shared_buffers):共享緩沖區(qū)的默認(rèn)值為
32 MB;但是,建議將其設(shè)置為總內(nèi)存的25%左右,但是在Linux系統(tǒng)上不超過(guò)8 GB,在windows系統(tǒng)上不超過(guò)512 MB。有時(shí),將shared_buffers增加到一個(gè)非常高的值會(huì)導(dǎo)致性能的提高,因?yàn)閿?shù)據(jù)庫(kù)可以完全緩存在RAM中。但是,過(guò)多地增加這個(gè)值的缺點(diǎn)是無(wú)法為諸如排序和散列之類(lèi)的CPU操作分配內(nèi)存。
(不是太贊同書(shū)中的關(guān)于這段的內(nèi)容,實(shí)際上這個(gè)值應(yīng)該根據(jù)應(yīng)用系統(tǒng)的情況來(lái)設(shè)置,例如是OLTP OLAP, 以及運(yùn)行一段時(shí)間的統(tǒng)計(jì)信息,在進(jìn)行二次調(diào)整會(huì)更好)
Working Memory (work_mem)
工作內(nèi)存(work_mem):默認(rèn)值為1 MB;對(duì)于cpu綁定操作,增加這個(gè)值很重要。work_mem設(shè)置與連接數(shù)相關(guān)聯(lián),因此使用的RAM總數(shù)等于連接數(shù)乘以work_mem。工作內(nèi)存用于排序和散列,因此它會(huì)影響使用順序BY的查詢(xún),
不同的、聯(lián)合查詢(xún)等.
如我們?cè)诓樵?xún)語(yǔ)句是,通過(guò) explain analyze 時(shí)可以看到這個(gè)語(yǔ)句的內(nèi)存使用的情況
擴(kuò)展:
書(shū)中到此內(nèi)存的內(nèi)容就沒(méi)有了實(shí)際上,PG的內(nèi)存調(diào)整還涉及
temp_buffers = 8MB 針對(duì)每個(gè)數(shù)據(jù)庫(kù)進(jìn)行的臨時(shí)BUFFER的設(shè)置,在未使用的狀態(tài)下每個(gè)SESSION會(huì)占用 64bytes作為占位符
maintenance_work_mem = 64MB
指定維護(hù)操作(如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)所使用的最大內(nèi)存量。它默認(rèn)為64兆字節(jié)(64MB)。由于數(shù)據(jù)庫(kù)會(huì)話一次只能執(zhí)行其中的一個(gè)操作,而且安裝通常不會(huì)同時(shí)運(yùn)行許多操作,因此可以將這個(gè)值設(shè)置為比work_mem大得多的值。較大的設(shè)置可能提高清空和恢復(fù)數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)的性能。
autovacuum_work_mem 在數(shù)據(jù)庫(kù)中最重要的autovacuum中使用的內(nèi)存,默認(rèn)值 -1表示為使用 maintenance_work_mem的配置來(lái)替代這個(gè)配置.
shared_memory_type = mmap
dynamic_shared_memory_type = posix
關(guān)于如何開(kāi)始優(yōu)化數(shù)據(jù)庫(kù)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。