亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > PostgreSQL > 正文

一個(gè)提升PostgreSQL性能的小技巧

2020-10-29 21:50:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 在一個(gè)(差)的PostgreSQL 查詢(xún)中只要一個(gè)小小到改動(dòng)(ANY(ARRAY[...])to ANY(VALUES(...)))就能把查詢(xún)時(shí)間從20s縮減到0.2s。從最簡(jiǎn)單的學(xué)習(xí)使用 EXPLAIN ANALYZE開(kāi)始,到學(xué)習(xí)使用 Postgres community 大量學(xué)習(xí)時(shí)間的投入將有百倍時(shí)間到回報(bào)。

使用Postgres監(jiān)測(cè)慢的Postgres查詢(xún)

在這周早些時(shí)候,一個(gè)用于我們的圖形編輯器上的小表(10GB,1500萬(wàn)行)的主鍵查詢(xún),在我們的一個(gè)(多個(gè))數(shù)據(jù)庫(kù)上發(fā)生來(lái)大的查詢(xún)性能問(wèn)題。

99.9%到查詢(xún)都是非常迅速流暢的,但是在一些使用大量的枚舉值的地方,這些查詢(xún)會(huì)需要20秒?;ㄙM(fèi)如此多到時(shí)間在數(shù)據(jù)庫(kù)上,意味著使用者必須在瀏覽器面前等待圖形編輯器的響應(yīng)。很明顯只因?yàn)檫@0.01%就會(huì)造成很不好到影響。

查詢(xún)和查詢(xún)計(jì)劃

下面是這個(gè)出問(wèn)題的查詢(xún)
 

SELECT c.key,    c.x_key,    c.tags,    x.name FROM context c JOIN x  ON c.x_key = x.keyWHERE c.key = ANY (ARRAY[15368196, -- 11,000 other keys --)]) AND c.x_key = 1 AND c.tags @> ARRAY[E'blah'];

表X有幾千行數(shù)據(jù),表C有1500萬(wàn)條數(shù)據(jù)。兩張表的主鍵值“key”都有適當(dāng)?shù)乃饕?。這是一個(gè)非常簡(jiǎn)單清晰的主鍵查詢(xún)。但有趣的是,當(dāng)增加主鍵內(nèi)容的數(shù)量,如在主鍵有11,000個(gè)值的時(shí)候,通過(guò)在查詢(xún)語(yǔ)句上加上 EXPLAIN (ANALYZE, BUFFERS)我們得到如下的查詢(xún)計(jì)劃。
 

Nested Loop (cost=6923.33..11770.59 rows=1 width=362) (actual time=17128.188..22109.283 rows=10858 loops=1) Buffers: shared hit=83494 -> Bitmap Heap Scan on context c (cost=6923.33..11762.31 rows=1 width=329) (actual time=17128.121..22031.783 rows=10858 loops=1)    Recheck Cond: ((tags @> '{blah}'::text[]) AND (x_key = 1))    Filter: (key = ANY ('{15368196,(a lot more keys here)}'::integer[]))    Buffers: shared hit=50919    -> BitmapAnd (cost=6923.33..6923.33 rows=269 width=0) (actual time=132.910..132.910 rows=0 loops=1)       Buffers: shared hit=1342       -> Bitmap Index Scan on context_tags_idx (cost=0.00..1149.61 rows=15891 width=0) (actual time=64.614..64.614 rows=264777 loops=1)          Index Cond: (tags @> '{blah}'::text[])          Buffers: shared hit=401       -> Bitmap Index Scan on context_x_id_source_type_id_idx (cost=0.00..5773.47 rows=268667 width=0) (actual time=54.648..54.648 rows=267659 loops=1)          Index Cond: (x_id = 1)          Buffers: shared hit=941 -> Index Scan using x_pkey on x (cost=0.00..8.27 rows=1 width=37) (actual time=0.003..0.004 rows=1 loops=10858)    Index Cond: (x.key = 1)    Buffers: shared hit=32575Total runtime: 22117.417 ms

在結(jié)果的最底部你可以看到,這個(gè)查詢(xún)總共花費(fèi)22秒。我們可以非常直觀(guān)的通過(guò)下面的CPU使用率圖觀(guān)察到這22秒的花費(fèi)。大部分的時(shí)間花費(fèi)在 Postgres和 OS 上, 只有很少部分用于I/O . 

2015421115721448.png (562×337)

 在最低的層面,這些查詢(xún)看起來(lái)就像是這些CPU利用率的峰值。CPU圖很少有用,但是在這種條件下它證實(shí)了關(guān)鍵的一點(diǎn):數(shù)據(jù)庫(kù)并沒(méi)有等待磁盤(pán)去讀取數(shù)據(jù)。它在做一些排序,哈希以及行比較之類(lèi)的事情。

第二個(gè)有趣的度量,就是距離這些峰值很近的軌跡,它們是由Postgres“取得”的行數(shù)(本例中沒(méi)有返回,就看看再忽略掉吧)。 

2015421115811688.png (563×338)

 顯然有些動(dòng)作在規(guī)則的有條不紊的瀏覽過(guò)許多行:我們的查詢(xún)。
 
Postgres 的問(wèn)題所在:位圖掃描

下面是行匹配的查詢(xún)計(jì)劃

 

Buffers: shared hit=83494 -> Bitmap Heap Scan on context c (cost=6923.33..11762.31 rows=1 width=329) (actual time=17128.121..22031.783 rows=10858 loops=1)    Recheck Cond: ((tags @> '{blah}'::text[]) AND (x_key = 1))    Filter: (key = ANY ('{15368196,(a lot more keys here)}'::integer[]))    Buffers: shared hit=50919

Postgres 使用位圖掃描表C. 當(dāng)主鍵的數(shù)據(jù)量小的時(shí)候,它能有效的使用索引在內(nèi)存里建立位圖。如果位圖太大,最優(yōu)查詢(xún)計(jì)劃就改變查詢(xún)方式了。在我們這個(gè)查詢(xún)中,因?yàn)橹麈I包含的數(shù)據(jù)量很大,所以查詢(xún)就使用最優(yōu)(系統(tǒng)自己判斷的)的方式去檢索查詢(xún)候選行,并且立即查詢(xún)所有和主鍵匹配的數(shù)據(jù)。就是這些¨放入內(nèi)存¨和¨立即查詢(xún)¨花費(fèi)太多的時(shí)間(查詢(xún)計(jì)劃中的Recheck Cond)。

幸好只有30%的數(shù)據(jù)被導(dǎo)入到內(nèi)存中,所以還不至于像從硬盤(pán)里讀取那么壞。但它仍然對(duì)性能有非常明顯的影響。記住,查詢(xún)是非常簡(jiǎn)單的。這是一個(gè)主鍵查詢(xún)所以沒(méi)有很多明了的方式來(lái)確定它有沒(méi)有戲劇性的重新架構(gòu)數(shù)據(jù)庫(kù)或應(yīng)用程序。PGSQL-Performance mailing list給予了我們很大的幫助.
 
解決方案

這是我們喜歡開(kāi)源和喜歡幫助用戶(hù)的另外一個(gè)原因。Tom Lane是開(kāi)源代碼作者中最盛產(chǎn)的程序員之一,他建議我們做如下嘗試:
 

SELECT c.key,    c.x_key,    c.tags,    x.name FROM context c JOIN x  ON c.x_key = x.keyWHERE c.key = ANY (VALUES (15368196), -- 11,000 other keys --) AND c.x_key = 1 AND c.tags @> ARRAY[E'blah'];

把ARRAY改成VALUES,你能指出他們的不同點(diǎn)嗎?

我們使用ARRAY[...]列舉出所有的關(guān)鍵字以用來(lái)查詢(xún),但是這卻欺騙了查詢(xún)優(yōu)化器。然而Values(...)卻能夠讓優(yōu)化器充分使用關(guān)鍵字索引。僅僅是一行代碼的改變,并且沒(méi)有產(chǎn)生任何語(yǔ)義的改變。

下面是新查詢(xún)語(yǔ)句的寫(xiě)法,差別就在于第三和第十四行。
 

Nested Loop (cost=168.22..2116.29 rows=148 width=362) (actual time=22.134..256.531 rows=10858 loops=1) Buffers: shared hit=44967 -> Index Scan using x_pkey on x (cost=0.00..8.27 rows=1 width=37) (actual time=0.071..0.073 rows=1 loops=1)    Index Cond: (id = 1)    Buffers: shared hit=4 -> Nested Loop (cost=168.22..2106.54 rows=148 width=329) (actual time=22.060..242.406 rows=10858 loops=1)    Buffers: shared hit=44963    -> HashAggregate (cost=168.22..170.22 rows=200 width=4) (actual time=21.529..32.820 rows=11215 loops=1)       -> Values Scan on "*VALUES*" (cost=0.00..140.19 rows=11215 width=4) (actual time=0.005..9.527 rows=11215 loops=1)    -> Index Scan using context_pkey on context c (cost=0.00..9.67 rows=1 width=329) (actual time=0.015..0.016 rows=1 loops=11215)       Index Cond: (c.key = "*VALUES*".column1)       Filter: ((c.tags @> '{blah}'::text[]) AND (c.x_id = 1))       Buffers: shared hit=44963Total runtime: 263.639 ms

查詢(xún)時(shí)間從22000ms下降到200ms,僅僅一行代碼的改變效率就提高了100倍。

在生產(chǎn)中使用的新查詢(xún)

即將發(fā)布的一段代碼:
它使數(shù)據(jù)庫(kù)看起來(lái)更美觀(guān)輕松. 2015421115846694.png (565×341)

 第三方工具

postgres慢查詢(xún)不存在了。但是有誰(shuí)樂(lè)意被0.1%不幸的少數(shù)折磨。要立即驗(yàn)證修改查詢(xún)的影響,就需要Datadog來(lái)幫助我們判斷修改是否是正確的。

如果你想要找出對(duì)Postgres查詢(xún)改變的影響,可能需要幾分鐘來(lái)注冊(cè)一個(gè)免費(fèi)的Datadog賬號(hào)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
99久久精品国产网站| 亚洲精品视频在线播放| 潘金莲一级淫片aaaaaa播放1| 91在线观看喷潮| 成人欧美一区二区三区小说| 久久久999精品视频| 国内精品自线一区二区三区视频| 久久精品国产久精国产思思| 韩国美女主播一区| 精品国产网站地址| 成人免费网址在线| 亚洲国产日韩欧美综合久久| 久久电影网电视剧免费观看| 国产精品欧美综合在线| 免费在线黄色av| 九七伦理97伦理| 92看片淫黄大片欧美看国产片| 中文字幕天堂av| 国产ts一区二区| 亚洲欧洲韩国日本视频| 天天射天天色天天干| 久久精品人人做人人爽电影| 精品久久久久久久久久久久包黑料| 精品国产鲁一鲁一区二区张丽| 国产裸体永久免费无遮挡| 欧美日韩精品在线观看| 色哟哟在线观看一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 欧美成人午夜视频| 中文字幕在线亚洲| www.天天操.com| 久久精品国内一区二区三区水蜜桃| 最近中文字幕一区二区| 中文字幕免费一区二区三区| 中文字幕日韩av综合精品| 欧美美乳视频网站在线观看| 国产精品av网站| 特级西西www444人体聚色| 97成人在线免费视频| 国产在线黄色片| 亚洲精品午夜av福利久久蜜桃| 卡通动漫精品一区二区三区| 国产乱人乱偷精品视频a人人澡| 精品一区二区在线观看视频| 亚洲国产中文字幕| 一区二区三区导航| 欧美日韩国产一区二区三区| 亚洲午夜精品福利| 亚洲色婷婷一区二区三区| 国产又粗又长免费视频| 日韩精品在线一区| 影音先锋资源av| 久久天堂电影网| 99久热在线精品视频观看| 国产中文在线视频| 欧美一区二区激情视频| 天堂久久久久va久久久久| www.欧美三级电影.com| 欧美性猛交丰臀xxxxx网站| 97人人澡人人爽人人模亚洲| 精品日本一区二区三区在线观看| 亚洲欧美天堂网| 99爱视频在线| 亚洲一区二区偷拍| 国产精品扒开腿做爽爽爽软件| 欧美亚洲综合视频| 亚洲色图在线观看| 久久精品国产亚洲av麻豆色欲| 91热门视频在线观看| 国产亚洲欧美在线精品| 国产一区二区精品久| 亚洲午夜日本在线观看| 精品综合免费视频观看| 蜜桃视频一区二区三区在线观看| 欧美成人免费观看| 91成人免费看| 十八禁视频网站在线观看| av电影免费在线观看| 天堂资源在线亚洲视频| 特色特色大片在线| 欧美性xxxx| 97精品在线观看| 欧美精品在线免费观看| 激情欧美一区二区三区中文字幕| 亚洲三级电影| 久久亚洲国产成人| 国产av无码专区亚洲av麻豆| 九一国产精品视频| 欧美特黄a级高清免费大片a级| 农村妇女精品一区二区| 91国语精品自产拍| 亚洲高清免费在线观看| 亚洲自拍偷拍色图| 天天色综合社区| 亚洲ai欧洲av| 四虎永久在线精品免费网址| av资源种子在线观看| 麻豆影视在线观看| 里番全彩acg☆无翼乌全彩3d| 传媒在线观看| 日本视频一二三区中文字幕| 亚洲精品午夜级久久久久| 久操视频在线观看免费| 97成人精品视频在线观看| 91看片淫黄大片一级| 99精品欧美一区二区蜜桃免费| 欧美日韩一级大片网址| 国产乱码精品一区二区三区精东| 日韩欧美视频一区二区| 韩日中文字幕第一页| 日韩网站在线播放| 色吊丝av中文字幕| 久久99久久99精品中文字幕| 日韩中文字幕国产| 福利在线导航136| 国产精品久久夜| 欧美三级特黄| 深夜影院在线观看| 91国在线精品国内播放| av男人的天堂在线观看| 亚洲av熟女高潮一区二区| 亚洲精品一区二区口爆| 最近中文视频在线| 99re在线视频观看| 国内外成人免费在线视频| 在线观看一区二区三区四区| 真人bbbbbbbbb毛片| 国产亚洲自拍一区| 日韩精品一区二区三区久久| 国产综合色香蕉精品| 日韩欧美伦理| 欧美美女喷水视频| 日本午夜大片| 欧美亚洲尤物久久| 99国产精品久久久久老师| 欧美三级午夜理伦三级在线观看| 好吊色视频一区二区| 国产精品27p| 免费看av大片| 欧美色综合天天久久综合精品| 免费日韩中文字幕| 欧美禁忌电影网| 91麻豆精品国产91久久久更新资源速度超快| 一区二区三区在线免费观看| 日韩av手机在线| 国产欧美精品一区二区三区介绍| 秋霞国产精品| 日韩一区二区三区在线播放| 亚洲天堂久久久久| 91成人精品一区二区| 欧美日夜夜逼| 亚洲av无一区二区三区久久| 成人一级免费视频| 99久久亚洲精品蜜臀| 2021天堂中文幕一二区在线观| 国产区精品视频| 国产精品99久久久久久久| 在线看片福利| av午夜在线观看| 日本免费一区二区三区视频观看| japanese色系久久精品| 欧美精品在线播放| 欧美在线影院| 只有精品亚洲| 在线看av网址| 在线播放av网址| 视频一区在线播放| 无码国产精品一区二区高潮| 成人天堂入口网站| 午夜一区二区三区| 国产成人精品无码免费看夜聊软件| 国产乱妇无码大片在线观看| 亚洲一区二区三区四区av| 日韩小视频在线观看专区| 欧美成人免费看| 国产精品大全| 欧美日韩免费观看一区三区| 四虎成人精品一区二区免费网站| 欧美女孩性生活视频| 俄罗斯黄色一级片| 欧美最猛黑人xxxx黑人猛交3p| 精品无码一区二区三区| 欧美亚洲成人xxx| www.99riav| 亚洲成人网av| 国产精品熟妇一区二区三区四区| 精品人伦一区二区三区蜜桃网站| eeuss鲁片一区| 精品福利免费观看| 午夜精品久久久久久久第一页按摩| www.99com| 黄色网址免费看| 国产91色在线|| 欧美一区二区三区爽大粗免费| 精品国产无码AV| 国产欧美亚洲视频| 欧美剧情电影在线观看完整版免费励志电影| 久久久高清视频| 7777精品久久久大香线蕉| 黄色国产网站在线观看| 欧美在线影院在线视频| 午夜不卡在线视频| 黄色成人91| 精品国产91亚洲一区二区三区婷婷| 亚洲国产精久久久久久| 国产视频精品一区二区三区| 亚洲精品乱码久久久久久久| 欧美综合亚洲图片综合区| 99久久er热在这里只有精品15| 亚洲精品视频久久| 国产三线在线| 中文字幕在线播放视频| 国产大尺度在线观看| 日韩一区二区中文字幕| 久久久蜜桃一区二区人| 中文字幕超清在线免费观看| 4hu四虎永久网址| 亚洲高清在线一区| 国产精品激情av在线播放| 中文字幕在线综合| 欧美岛国在线观看| 欧美丝袜丝交足nylons| 久久久精品一品道一区| 日韩女优av电影在线观看| 亚洲男女在线观看| www.国产精品.com| 日韩手机在线导航| 国产成人三级视频| 性生活视频网站| 日韩午夜激情| 99riav视频一区二区| 欧美天天在线| 久久综合久久综合久久综合| 一本色道综合久久欧美日韩精品| 18av.com视频| 在线亚洲电影| 91xxx在线观看| 福利视频一区二区三区| 五月天激情小说综合| 久久国产色av| 日本va欧美va欧美va精品| 国产99久久久国产精品| 中文有码在线观看| 亚洲精品网址| 国产精品福利电影一区二区三区四区| 美女少妇全过程你懂的久久| 日本道精品一区二区三区| 五月天精品视频| 精品欧美一区免费观看α√| 亚洲三区在线播放| 欧美性猛交ⅹxxx乱大交免费| 日韩三级电影网站| 乱中年女人伦av一区二区| 国产精品资源在线观看| 国产精品自产拍在线观看中文| av激情在线| 日韩中文娱乐网| 少妇高潮av久久久久久| 天天摸天天碰天天爽天天弄| 欧美调教femdomvk| 亚洲欧美日韩中文在线制服| 亚洲精品字幕在线| 欧美日韩天天操| 日韩小视频在线播放| 高清不卡日本v二区在线| 欧美日韩18| 日韩在线第二页| 欧美激情国产日韩| 国产精品无码一区二区三区| 国产在线观看免费视频软件| 无码h黄肉3d动漫在线观看| 51av在线| 九色porny视频国产网曝| 午夜激情福利视频| 性网站在线播放| 日韩一区二区三区在线观看| 欧美精品 - 色网| 成年人视频在线网站| 国产又粗又猛大又黄又爽| 最新国产一区| 国产99精品一区| 麻豆视频在线观看免费网站黄| 日韩在线视频精品| 精品伊人久久97| 亚洲热app| 亚洲成人一二三| 精品视频一区二区三区四区五区| 嫩草一区二区三区| 亚洲成人av观看| 中文字幕剧情在线观看| 亚洲第一二三区| 国产99999| 亚洲高清免费一级二级三级| 欧美xxxx做受欧美.88| 亚洲午夜久久久久中文字幕久| 亚洲成人影院麻豆| 亚洲精品一区在线观看| 五月天av网站| xfplay资源站色先锋在线观看| 日韩精品一区二区三区免费视频| 伊人影院在线观看视频| 白白色 亚洲乱淫| 超级砰砰砰97免费观看最新一期| 666精品在线| 91人人澡人人爽人人精品| 日韩一区二区三区视频在线观看| 中文在线最新版地址| 日韩在线观看成人| 91尤物视频在线观看| 五月天黄色网址| 影音先锋5566中文源资源| 欧美综合激情| 久久男人av| 亚洲熟女综合色一区二区三区| 香蕉视频一区| 日韩一区av| 天天干天天操天天拍| 就爱干草视频| 亚洲 欧美 另类人妖| 精品国产百合女同互慰| 人人妻人人澡人人爽欧美一区| 日本h在线观看| 亚洲sss视频在线视频| 一级免费黄色录像| 99精品欧美一区| 亚洲电影第1页| 亚洲精品影视在线观看| 久久久伦理片|