แ แแแแแแแแ แแแแก แฌแแ
แแแก แจแแแแแ แแก 6000-แแ แแแขแฏแแ แแแแแแงแแแ, แแแแ แแ แแ แ-แแ แแ แแแกแแฎแแ แฎแแแแแ แคแฃแแฅแชแแ แจแแกแแซแแแ แจแแฃแแฉแแแแแแ แแแ แฉแแก แแ แแก แกแขแ แฃแฅแขแฃแ แฃแแ แแแแแจแแแแแแ, แ แแแแแแแช แแกแ แแแแแแงแฃแ แแแ:
แแแฃแกแแแแแ แแแ แแ แแฅแแแแ แแแแฎแแแแแแ "แแแ แแจแฃแแแกแแแ แ แแแฃแแ แแแฎแแแแ". ๐
แแแแ แแ แกแแ แแแแฃแแแ, แแแแ แ แกแแขแฃแแชแแ, แ แแแแแแช แแแซแฃแแแแก แแแแฎแแแแแก แแแแ แแ โแแแแแซแฆแแ แโ แ แแกแฃแ แกแแแแก แแแแแกแแแ แแกแแ, แขแแแแฃแ แแ แแ แแแแ แแแแชแแแแ แจแแกแแซแแแแแแแ แแแแแแก แกแขแ แฃแฅแขแฃแ แแแ แแ แแแแแชแแแแแแ.
แแ แจแแแแฎแแแแแจแ, แแแแแแฃแ แชแแแแแฃแ แแแแแแแแแ แก แแ แแแฃแฌแแแก แแแแแฃแแแแแแแแ แแซแแแแก แแแขแแแแแแชแแแก แแแ แแแแขแ, แแฎแแแแ แกแแแฃแแแ แแแแแชแแแแแแแแ แแแงแ แแแแแแ - แฉแแแ แจแแแแแซแแแ แแฃแแฎแ แแ แแแก แ แ แฎแแแแ แแฅ, แ แ แจแแแซแแแแ แแงแแก แแแแแแ แแ แ แแแแ แแแแซแแแแแก แแแแแกแแแแแ. แ แแช แฉแแแ แแแแแแแแแ.
แแแแแ, แฃแคแ แ แแแขแแแฃแ แแ แแแแแแฎแแแแ แแก แจแแแแฎแแแแแแ - แ แแแแ แแ แแก แแแแกแแแฆแแ แฃแแ แแ แ แ แ แแแแแแแแแชแแแแก แแฌแแแแก.
แแแแแก แฃแแแ แฉแแซแแ แแแกแแแแก, แฏแแ แจแแแแซแแแแ แแแฃแกแแแแแ แจแแกแแแแแแก แแแแแก
#1: แแแแแฅแกแ "แแแฎแแ แแกแฎแแแ"
แฒ แแแแก
แแฉแแแแแ แแแแแแขแแก แแแแ แแแแแแกแ "แจแแก แแแแแแแแฉแแแ".
แ แแแแ แแแแแแชแแแ
-> Limit
-> Sort
-> Index [Only] Scan [Backward] | Bitmap Heap Scan
แ แแแแแแแแแชแแแแ
แแแแแงแแแแแฃแแ แแแแแฅแกแ แแแคแแ แแแแแ แแแฎแแ แแกแฎแแแแก แแแแแแแ.
แแแแแแแแ:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, (random() * 1000)::integer fk_cli; -- 1K ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
CREATE INDEX ON tbl(fk_cli); -- ะธะฝะดะตะบั ะดะปั foreign key
SELECT
*
FROM
tbl
WHERE
fk_cli = 1 -- ะพัะฑะพั ะฟะพ ะบะพะฝะบัะตัะฝะพะน ัะฒัะทะธ
ORDER BY
pk DESC -- ั
ะพัะธะผ ะฒัะตะณะพ ะพะดะฝั "ะฟะพัะปะตะดะฝัั" ะทะฐะฟะธัั
LIMIT 1;
แแแจแแแแ แจแแแแฉแแแแ, แ แแ แแแแแฅแกแแ 100-แแ แแแขแ แฉแแแแฌแแ แ แแแแแแแแ, แ แแแแแแแช แจแแแแแ แงแแแแ แแแแแแแ, แจแแแแแ แแ แแ แแแแแ แแ แแแ แฉแ.
แแแกแฌแแ แแแ:
DROP INDEX tbl_fk_cli_idx;
CREATE INDEX ON tbl(fk_cli, pk DESC); -- ะดะพะฑะฐะฒะธะปะธ ะบะปัั ัะพััะธัะพะฒะบะธ
แแกแแ แแ แแแแขแแฃแ แแแแฃแจแแแช แแ - 8.5-แฏแแ แฃแคแ แ แกแฌแ แแคแ แแ 33-แฏแแ แแแแแแแ แแแแฎแแ. แแคแแฅแขแ แฃแคแ แ แแแแคแแ แแฅแแแแ, แแแ แแแขแ โแคแแฅแขแโ แแแฅแแแแแ แแแแแแฃแแ แแแแจแแแแแแแแกแแแแก. fk
.
แแ แแฆแแแแจแแแ, แ แแ แแกแแแ แแแแแฅแกแ แแแฃแจแแแแแก แ แแแแ แช "แแ แแคแแฅแกแ" แแแแแฅแกแ, แ แแแแแแช แแ แแ แแก แฃแแ แแกแ, แแแแ แ แฌแแแ แกแฎแแ แแแแฎแแแแแแแกแแแแก. fk
, แกแแแแช แแแฎแแ แแกแฎแแแ pk
แแ แแงแ แแ แแ แแ แแก (แจแแแแซแแแแ แแแขแ แฌแแแแแแฎแแ แแแแก แจแแกแแฎแแ
#2: แแแแแฅแกแแก แแแแแ (BitmapAnd)
แฒ แแแแก
แแฉแแแแแ แงแแแแ แแแแขแ แแฅแขแ แแแแแแขแแกแแแแก "แจแแก แแแแแแแแฉแแแ" แแแแแแฃแแ "NJSC Lyutik"-แแก แกแแฎแแแแ.
แ แแแแ แแแแแแชแแแ
-> BitmapAnd
-> Bitmap Index Scan
-> Bitmap Index Scan
แ แแแแแแแแแชแแแแ
แจแแฅแแแ แแแแแแแแขแฃแ แ แแแแแฅแกแ แแแแแแแก แแแฎแแแแแ แแ แแแ แฌแงแแ แแแแ แแ แแแแคแแ แแแแแ แแ แ-แแ แแ แแ แกแแแฃแแ แแแแ แแแแ แแแแ.
แแแแแแแแ:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, (random() * 100)::integer fk_org -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
, (random() * 1000)::integer fk_cli; -- 1K ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
CREATE INDEX ON tbl(fk_org); -- ะธะฝะดะตะบั ะดะปั foreign key
CREATE INDEX ON tbl(fk_cli); -- ะธะฝะดะตะบั ะดะปั foreign key
SELECT
*
FROM
tbl
WHERE
(fk_org, fk_cli) = (1, 999); -- ะพัะฑะพั ะฟะพ ะบะพะฝะบัะตัะฝะพะน ะฟะฐัะต
แแแกแฌแแ แแแ:
DROP INDEX tbl_fk_org_idx;
CREATE INDEX ON tbl(fk_org, fk_cli);
แแฅ แแแแแแ แฃแคแ แ แแชแแ แแ, แ แแแแแ Bitmap Heap Scan แแแแแกแแแแแ แกแแแแแแ แแคแแฅแขแฃแ แแ. แฒแแแ แแ แแแแแช 7-แฏแแ แฃแคแ แ แกแฌแ แแคแ แแ 2.5-แฏแแ แแแแแแแ แแแแฎแแ.
#3: แแแแแฅแกแแแแก แแแแ แแแแแแแ (BitmapOr)
แฒ แแแแก
แแฉแแแแแ แแแ แแแแ 20 แฃแซแแแแแกแ "แกแแแฃแแแ แ" แแ แแแฃแฌแแ แแแ แแแแฎแแแแ แแแแฃแจแแแแแแกแแแแก, แแ แแแ แแขแแขแฃแแแ แกแแแฃแแแ แ.
แ แแแแ แแแแแแชแแแ
-> BitmapOr
-> Bitmap Index Scan
-> Bitmap Index Scan
แ แแแแแแแแแชแแแแ
แแแแแแงแแแแ แแแแ แแแแแแแ [แงแแแแ] แแแแแแแจแแ แแ แฅแแแแแแฎแแแแแแ แแแแแแฃแแ แแแ แแแแก แแ แแแแแแกแแแแก.
แแแแแแแแ:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, CASE
WHEN random() < 1::real/16 THEN NULL -- ั ะฒะตัะพััะฝะพัััั 1:16 ะทะฐะฟะธัั "ะฝะธััั"
ELSE (random() * 100)::integer -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
END fk_own;
CREATE INDEX ON tbl(fk_own, pk); -- ะธะฝะดะตะบั ั "ะฒัะพะดะต ะบะฐะบ ะฟะพะดั
ะพะดััะตะน" ัะพััะธัะพะฒะบะพะน
SELECT
*
FROM
tbl
WHERE
fk_own = 1 OR -- ัะฒะพะธ
fk_own IS NULL -- ... ะธะปะธ "ะฝะธััะธ"
ORDER BY
pk
, (fk_own = 1) DESC -- ัะฝะฐัะฐะปะฐ "ัะฒะพะธ"
LIMIT 20;
แแแกแฌแแ แแแ:
(
SELECT
*
FROM
tbl
WHERE
fk_own = 1 -- ัะฝะฐัะฐะปะฐ "ัะฒะพะธ" 20
ORDER BY
pk
LIMIT 20
)
UNION ALL
(
SELECT
*
FROM
tbl
WHERE
fk_own IS NULL -- ะฟะพัะพะผ "ะฝะธััะธ" 20
ORDER BY
pk
LIMIT 20
)
LIMIT 20; -- ะฝะพ ะฒัะตะณะพ - 20, ะฑะพะปััะต ะธ ะฝะต ะฝะฐะดะพ
แฉแแแ แแแกแแ แแแแแแ แแแแ, แ แแ 20-แแ แแฃแชแแแแแแแ แฉแแแแฌแแ แ แแแฃแงแแแแแแแแ แแฅแแ แแแฆแแแฃแแ แแแ แแแ แแแแแจแ, แแกแ แ แแ, แแแแ แ, แฃแคแ แ "แซแแแ แ" Bitmap Heap Scan-แแ, แแ แช แแ แจแแกแ แฃแแแแฃแแ - แจแแแแแแ. 22-แฏแแ แฃแคแ แ แกแฌแ แแคแ, 44-แฏแแ แแแแแแแ แแแแฎแแ!
แฃแคแ แ แแแขแแแฃแ แ แแแแแแ แแ แแแขแแแแแแชแแแก แแแแแแแก แจแแกแแฎแแ แแแแแ แแขแฃแ แแแแแแแแแแแ แจแแแซแแแแ แฌแแแแแแฎแแ แกแขแแขแแแแจแ
PostgreSQL แแแขแแแแขแแ แแแแ: แแแแแ แจแแแ แแแแแแ แแ OR ะธPostgreSQL Antipatterns: แแฆแแแแ แ แกแแฎแแแแก แแแฎแแแแแ แซแแแแแก แแแแแแแ แแแแแ แแแฎแแแฌแแก แจแแกแแฎแแ, แแ โแฌแแ แแ แฃแแแ แแแขแแแแแแชแแโ .แแแแแแแแแแแฃแแ แแแ แกแแ แจแแฃแแแแแ แจแแ แฉแแแ แ แแแแแแแแ แแแกแแฆแแแแ (แแ แแ แ แแฎแแแแ แฌแงแแแแ const / NULL) แแแแฎแแแฃแแแ แกแขแแขแแแจแ
SQL HowTo: แฉแแฌแแ แแ while-แชแแแแ แแแ แแแแแ แแแแฎแแแแแจแ, แแ โแแแฌแงแแแแแ แกแแแแฎแ แแแโ .
#4: แฉแแแ แซแแแแแ แแแแ แก แแแแแฎแฃแแแแ
แฒ แแแแก
แ แแแแ แช แฌแแกแ, แแก แฎแแแแ แแแจแแ, แ แแแแกแแช แแกแฃแ แ โแกแฎแแ แคแแแขแ แแก แแแแแแ แแแโ แแ แกแแแฃแ แแแแฎแแแแแแ.
โแแ แแฅแแแ แแ แแแฅแแ แแแแแ, แแแแ แแ แแแ แแแแแขแแก แฆแแแแแแ? " แคแแแแ "แแ แแแแแแขแแก แฎแแแ"
แแแแแแแแแ, แแแแแ แแแงแแแแแแ แแแแชแแแแก แจแแชแแแแ, แแฉแแแแแ แแแแฃแจแแแแแแก แแแ แแแแ 20 แฃแซแแแแแกแ โแแ แแขแแแฃแแโ แแแแฎแแแแ, แแแแฃแ แฉแแแแแ แแแแ แแแแแแกแ.
แ แแแแ แแแแแแชแแแ
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& 5 ร rows < RRbF -- ะพััะธะปัััะพะฒะฐะฝะพ >80% ะฟัะพัะธัะฐะฝะฝะพะณะพ
&& loops ร RRbF > 100 -- ะธ ะฟัะธ ััะพะผ ะฑะพะปััะต 100 ะทะฐะฟะธัะตะน ััะผะผะฐัะฝะพ
แ แแแแแแแแแชแแแแ
แจแแฅแแแแแ [แแแขแ] แกแแแชแแแแแแแแฃแแ แแแแแฅแกแ WHERE แแฃแแฅแขแแ แแ แจแแแขแแแแ แแแแแขแแแแแ แแแแแแ แแแแแฅแกแจแ.
แแฃ แคแแแขแ แแชแแแก แแแแแแแ แแแแ "แกแขแแขแแแฃแ แแ" แแฅแแแแ แแแแชแแแแแแกแแแแก - แแก แแ แแก แแ แแแแชแแแก แแแคแแ แแแแแแก แแแแจแแแแแแแแแแก แกแแ แแแแแแแแจแ - แฃแแฏแแแแกแแ แแแแแแงแแแแ WHERE แแแแแฅแกแ. แกแฎแแแแแกแฎแแ แแแแแแฃแ แ/แแแฃแ แกแขแแขแฃแกแ แแแ แแแ แฏแแแแ แแ แแแขแแแแ แแแจแ.
แแฃ แคแแแขแ แแชแแแก แแแแแแแ แแแแ แจแแฃแซแแแ แแแแฆแแก แกแฎแแแแแกแฎแแ แฆแแ แแแฃแแแแแแแกแฏแแแก แแแแแฅแกแ แแ แแแแแแแ แแแแแคแแ แแแแแ - แ แแแแ แช แแแแแ BitmapAnd-แแก แแแแแ แแแแจแ.
แแแแแแแแ:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, CASE
WHEN random() < 1::real/16 THEN NULL
ELSE (random() * 100)::integer -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
END fk_own
, (random() < 1::real/50) critical; -- 1:50, ััะพ ะทะฐัะฒะบะฐ "ะบัะธัะธัะฝะฐั"
CREATE INDEX ON tbl(pk);
CREATE INDEX ON tbl(fk_own, pk);
SELECT
*
FROM
tbl
WHERE
critical
ORDER BY
pk
LIMIT 20;
แแแกแฌแแ แแแ:
CREATE INDEX ON tbl(pk)
WHERE critical; -- ะดะพะฑะฐะฒะธะปะธ "ััะฐัะธัะฝะพะต" ััะปะพะฒะธะต ัะธะปัััะฐัะธะธ
แ แแแแ แช แฎแแแแแ, แแแแแแแแ แแแคแแแขแแ แ แแแแแแแแ แแแฅแ แ แแ แแแแฎแแแแ แแแฎแแ 5-แฏแแ แฃแคแ แ แกแฌแ แแคแแ.
#5: แแจแแแแแ แแแแแแ
แฒ แแแแก
แกแแแฃแแแ แ แแแแแแแแแก แแแแฃแจแแแแแแก แ แแแแก แจแแฅแแแแก แกแฎแแแแแกแฎแแ แแชแแแแแแ, แ แแแแกแแช แแแแแแแแ แฉแแแแฌแแ แแแแก แแแแแฎแแแแแแแก/แฌแแจแแแก แแแแ แ แแแแแแแแ แแฌแแแแก โแแแแแแ แโ แฉแแแแฌแแ แแแแก แแแแ แ แแแแแแแแแก แแแแแแแ แแแแแก.
แ แแแแ แแแแแแชแแแ
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& loops ร (rows + RRbF) < (shared hit + shared read) ร 8
-- ะฟัะพัะธัะฐะฝะพ ะฑะพะปััะต 1KB ะฝะฐ ะบะฐะถะดัั ะทะฐะฟะธัั
&& shared hit + shared read > 64
แ แแแแแแแแแชแแแแ
แ แแแฃแแแ แฃแแแ แแแแแฎแแ แชแแแแแ แฎแแแแ แแแแฃแฃแแ [แกแ แฃแแ] แแ แแแแฆแฌแแแ แแแแแแแขแฃแ แแ แฎแจแแ แแแแฃแจแแแแแแก
แฃแแแขแแก แจแแแแฎแแแแแจแ, แแกแแแ แแ แแแแแแแแ แแแแแฌแแแฃแแแ แจแแแแแฎแแแก แชแฃแแ แแแแแแแแแแ, แ แแแแกแแช แแแแแซแแฎแแแฃแแแ แแแแแแก แแแแแแแ, แ แแแแ แแชแแ แแแแฎแแแฃแแ
PostgreSQL แแแขแแแแขแแ แแแแ: "แแแแแ แแแแก" แแแจแฅแแ แแ แแ แซแแแ .แแแแ แแ แฉแแแ แฃแแแ แแแแกแแแแแก, แ แแ VACUUM FULL-แแช แแ แงแแแแแแแแก แแแ แแแแแแฎแแแ แแแ. แแกแแแ แจแแแแฎแแแแแแแกแแแแก, แแฅแแแ แฃแแแ แแแแชแแแ แกแขแแขแแแก แแแแแ แแแแก.
DBA: แ แแแแกแแช VACUUM แแแแแก, แฉแแแ แแแกแฃแคแแแแแแ แแแแแแแก แฎแแแแ .
#6: แแแแฎแแ แแแแแฅแกแแก "แจแฃแแแแ".
แฒ แแแแก
แ แแแแ แช แฉแแแก, แแแ แชแแขแ แฌแแแแแแฎแแก แแ แงแแแแแคแแ แ แแแแแฅแกแแ แแแฃแแ แแงแ แแ แแแแแแขแ แแ แแแแก แแแคแแแขแ แ - แแแแ แแ แแแแแช, แแแชแแแแแแ แแแขแ แแแแ แแ แฌแแแแแแฎแ, แแแแ แ แฉแแแ แแแกแฃแ แก.
แ แแแแ แแแแแแชแแแ
-> Index [Only] Scan [Backward]
&& loops ร (rows + RRbF) < (shared hit + shared read) ร 8
-- ะฟัะพัะธัะฐะฝะพ ะฑะพะปััะต 1KB ะฝะฐ ะบะฐะถะดัั ะทะฐะฟะธัั
&& shared hit + shared read > 64
แ แแแแแแแแแชแแแแ
แงแฃแ แแแฆแแแแ แแแแแแแ แแแ แแแแแงแแแแแฃแแ แแแแแฅแกแแก แกแขแ แฃแฅแขแฃแ แแก แแ แแแแฎแแแแแจแ แแแแแแแแฃแ แกแแแแแแซแ แแแแแแก - แกแแแแ แแฃแแแ, แแแแแฅแกแแก แแแฌแแแ แแ แแ แแก แแแแแแแแฃแแ. แแฅแแแ แกแแแแ แแฃแแแ แแแแญแแ แแแแแ แแกแแแแกแ แแแแแฅแกแแก แจแแฅแแแ, แแแแ แแ แแ แแคแแฅแกแแก แแแแแแแก แแแ แแจแ, แแ
แแแแแแแแ:
CREATE TABLE tbl AS
SELECT
generate_series(1, 100000) pk -- 100K "ัะฐะบัะพะฒ"
, (random() * 100)::integer fk_org -- 100 ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
, (random() * 1000)::integer fk_cli; -- 1K ัะฐะทะฝัั
ะฒะฝะตัะฝะธั
ะบะปััะตะน
CREATE INDEX ON tbl(fk_org, fk_cli); -- ะฒัะต ะฟะพััะธ ะบะฐะบ ะฒ #2
-- ัะพะปัะบะพ ะฒะพั ะพัะดะตะปัะฝัะน ะธะฝะดะตะบั ะฟะพ fk_cli ะผั ัะถะต ะฟะพััะธัะฐะปะธ ะปะธัะฝะธะผ ะธ ัะดะฐะปะธะปะธ
SELECT
*
FROM
tbl
WHERE
fk_cli = 999 -- ะฐ fk_org ะฝะต ะทะฐะดะฐะฝะพ, ั
ะพัั ััะพะธั ะฒ ะธะฝะดะตะบัะต ัะฐะฝััะต
LIMIT 20;
แ แแแแ แช แฉแแแก, แงแแแแแคแแ แ แแแ แแแแแ, แแฃแแแแช แแแแแฅแกแแก แแฎแ แแ, แแแแ แแ แ แแฆแแชแแแแ แแ แกแแแญแแแ - แฌแแแแแฎแฃแแ 20 แฉแแแแฌแแ แแแแ แแแแแแฃแแก 4 แแแแ แแแก แแแแแชแแแ แฃแแแ แแแแแแแแแแแแ, แแแแ แฉแแแแฌแแ แแ 32 แแ - แแแแแแ แแ แแ แแก? แแแแฎ แแ แแแแแฅแกแแก แกแแฎแแแ tbl_fk_org_fk_cli_idx
แแแ แแแแแแแแแ แแแแงแแแแ แ.
แแแกแฌแแ แแแ:
CREATE INDEX ON tbl(fk_cli);
แฃแชแแ - 10-แฏแแ แฃแคแ แ แกแฌแ แแคแแ แแ 4-แฏแแ แแแแแแแแ แฌแแกแแแแแฎแแ!
แแแแแฅแกแแแแก แแ แแแคแแฅแขแฃแ แ แแแแแงแแแแแแก แแแขแ แแแแแแแแแแแกแแแแก แแฎแแแแ แกแขแแขแแ
DBA: แแแแแแแ แฃแกแแ แแแแแ แแแแแฅแกแแแ .
#7: CTE ร CTE
แฒ แแแแก
แแแแฎแแแแแ แแแแขแแแ "แแกแฃแฅแแแ" CTE แกแฎแแแแแกแฎแแ แแแแแแแแแแแ แแ แจแแแแแ แแแแแแฌแงแแแขแ แแแ แจแแ แแก แแแแแแแแ JOIN
.
แกแแฅแแ แแฎแแแ v12 แฅแแแแแ แแแงแแแแแ แแแ แกแแแแก แแ แแแแฎแแแแแแก WITH MATERIALIZED
.
แ แแแแ แแแแแแชแแแ
-> CTE Scan
&& loops > 10
&& loops ร (rows + RRbF) > 10000
-- ัะปะธัะบะพะผ ะฑะพะปััะพะต ะดะตะบะฐััะพะฒะพ ะฟัะพะธะทะฒะตะดะตะฝะธะต CTE
แ แแแแแแแแแชแแแแ
แงแฃแ แแแฆแแแแ แแแแแแแแแแ แแแแฎแแแแ
#8: แแแกแแแ แจแแชแแแ (แขแแแแแ แแขแฃแ แ แแแฌแแ แแแแ)
แฒ แแแแก
แแแแ แ แแแแแแแแแ แฉแแแแฌแแ แแแแก แแ แแฏแแ แแแ แแแแฃแจแแแแแ (แแแฎแแ แแกแฎแแแ แแ แฃแแแแแแแชแแ) แแ แฏแแแแ แแแแกแแแแก แแแแแงแแคแแ แแแฎแกแแแ แแแแจแ.
แ แแแแ แแแแแแชแแแ
-> *
&& temp written > 0
แ แแแแแแแแแชแแแแ
แแฃ แแแแ แแชแแแก แแแแ แแแแแงแแแแแฃแแ แแแฎแกแแแ แแแแก แ แแแแแแแแ แแแแจแแแแแแแแแ แแ แแฆแแแแขแแแ แแแ แแแแขแ แแก แแแแแแแแ แแแแจแแแแแแแแก SET [LOCAL]
แแแแแ แแขแฃแแ แแแแฎแแแแแก/แขแ แแแแแฅแชแแแกแแแแก.
แแแแแแแแ:
SHOW work_mem;
-- "16MB"
SELECT
random()
FROM
generate_series(1, 1000000)
ORDER BY
1;
แแแกแฌแแ แแแ:
SET work_mem = '128MB'; -- ะฟะตัะตะด ะฒัะฟะพะปะฝะตะฝะธะตะผ ะทะฐะฟัะพัะฐ
แแแกแแแแแ แแแแแแแแแก แแแแ, แแฃ แแแแแแงแแแแแ แแฎแแแแ แแแฎแกแแแ แแแ แแ แแ แ แแแกแแ, แแแจแแ แแแแฎแแแแ แจแแกแ แฃแแแแแ แแแแ แแ แฃแคแ แ แกแฌแ แแคแแ. แแแแแแ แแฃแแแ, แแแขแแแ แแแแก แแแฌแแแ แแกแแแ แแแแฆแแแฃแแแ HDD-แแแ.
แแแแ แแ แแฅแแแ แฃแแแ แแแกแแแแแ, แ แแ แแแแ แ แแแฎแกแแแ แแแแก แแแแแงแแคแ แงแแแแแแแแก แแ แแแฃแจแแแแแก - แแก แฃแแ แแแแ แงแแแแแกแแแแก แกแแแแแ แแกแ แแ แแฅแแแแ.
#9: แจแแฃแกแแแแแ แกแขแแขแแกแขแแแ
แฒ แแแแก
แแแแแจแ แแ แแแ แแฃแแแ แแแแ แ แฉแแแกแฎแแก, แแแแ แแ แแแซแแแแแแก แแ แ แแ แฐแฅแแแแแ ANALYZE
.
แ แแแแ แแแแแแชแแแ
-> Seq Scan | Bitmap Heap Scan | Index [Only] Scan [Backward]
&& ratio >> 10
แ แแแแแแแแแชแแแแ
แแแฎแแ แฏแ แแแแแ ANALYZE
.
แแก แกแแขแฃแแชแแ แฃแคแ แ แแแขแแแฃแ แแ แแ แแก แแฆแฌแแ แแแ
PostgreSQL Antipatterns: แกแขแแขแแกแขแแแ แงแแแแแคแ แแก แกแแแแแแ .
#10: "แ แแฆแแช แแ แแกแฌแแ แแ แฌแแ แแแแ แแ"
แฒ แแแแก
แแงแ แฉแแแแขแแ, แ แแแแแแช แแแแแ แแแแแฃแ แแแขแฃแ แแแแฎแแแแแก, แแ แแ แแงแ แกแแแแแ แแกแ CPU/hypervisor แขแแฅแแแแแก แ แแกแฃแ แกแ.
แ แแแแ แแแแแแชแแแ
-> *
&& (shared hit / 8K) + (shared read / 1K) < time / 1000
-- RAM hit = 64MB/s, HDD read = 8MB/s
&& time > 100ms -- ัะธัะฐะปะธ ะผะฐะปะพ, ะฝะพ ัะปะธัะบะพะผ ะดะพะปะณะพ
แ แแแแแแแแแชแแแแ
แแแแแแงแแแแ แแแ แ แแแแแขแแ แแแแแก แกแแกแขแแแ แกแแ แแแ แ แ แแกแฃแ แกแแแแก แแแแแแแแแก แแ แแ แแแแ แแแแฃแ แ แแแฎแแแ แแแแกแแแแก. แฉแแแ แฃแแแ แแแกแแฃแแ แแ แแกแแแแ แกแแ แแแ แแกแแแแก แแ แแ แแชแแกแแก แแ แแแแแแแแแก แฉแแแแก แแแ แกแแแแ.
แฌแงแแ แ: www.habr.com