ನನ್ನ ಅಭಿಪ್ರಾಯದಲ್ಲಿ, ಹಿಂದಿನ ಬಿಡುಗಡೆಗಳಿಗಿಂತ ಭಿನ್ನವಾಗಿ, PostgreSQL 12 ಒಂದು ಅಥವಾ ಎರಡು ಕ್ರಾಂತಿಕಾರಿ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿಲ್ಲ (ವಿಭಜನೆ ಅಥವಾ ಸಮಾನಾಂತರತೆಯನ್ನು ಪ್ರಶ್ನಿಸಿ). PostgreSQL 12 ರ ಮುಖ್ಯ ಲಕ್ಷಣವೆಂದರೆ ಹೆಚ್ಚಿನ ಸ್ಥಿರತೆ ಎಂದು ನಾನು ಒಮ್ಮೆ ತಮಾಷೆ ಮಾಡಿದೆ. ನಿಮ್ಮ ವ್ಯಾಪಾರದ ನಿರ್ಣಾಯಕ ಡೇಟಾವನ್ನು ನೀವು ನಿರ್ವಹಿಸುವಾಗ ಅದು ನಿಮಗೆ ಬೇಕಾಗುತ್ತದೆಯೇ?
ಆದರೆ PostgreSQL 12 ಅಲ್ಲಿ ನಿಲ್ಲುವುದಿಲ್ಲ: ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಸುಧಾರಣೆಗಳೊಂದಿಗೆ, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಮತ್ತು ನೀವು ಮಾಡಬೇಕಾಗಿರುವುದು ಅಪ್ಗ್ರೇಡ್ ಆಗಿದೆ!
(ಸರಿ, ಬಹುಶಃ ಸೂಚ್ಯಂಕಗಳನ್ನು ಪುನರ್ನಿರ್ಮಿಸಬಹುದು, ಆದರೆ ಈ ಬಿಡುಗಡೆಯಲ್ಲಿ ಇದು ನಾವು ಬಳಸಿದಂತೆ ಭಯಾನಕವಲ್ಲ.)
PostgreSQL ಅನ್ನು ಅಪ್ಗ್ರೇಡ್ ಮಾಡಲು ಮತ್ತು ಅನಗತ್ಯ ಗಡಿಬಿಡಿಯಿಲ್ಲದೆ ತಕ್ಷಣವೇ ಗಮನಾರ್ಹ ಸುಧಾರಣೆಗಳನ್ನು ಆನಂದಿಸಲು ಇದು ಉತ್ತಮವಾಗಿರುತ್ತದೆ. ಕೆಲವು ವರ್ಷಗಳ ಹಿಂದೆ, ನಾನು PostgreSQL 9.4 ನಿಂದ PostgreSQL 10 ಗೆ ಅಪ್ಗ್ರೇಡ್ ಮಾಡಿರುವುದನ್ನು ಪರಿಶೀಲಿಸಿದ್ದೇನೆ ಮತ್ತು PostgreSQL 10 ನಲ್ಲಿನ ಸುಧಾರಿತ ಪ್ರಶ್ನೆ ಸಮಾನಾಂತರತೆಗೆ ಧನ್ಯವಾದಗಳು ಅಪ್ಲಿಕೇಶನ್ ಹೇಗೆ ವೇಗಗೊಂಡಿದೆ ಎಂಬುದನ್ನು ನೋಡಿದೆ. ಮತ್ತು, ಮುಖ್ಯವಾಗಿ, ನನ್ನಿಂದ ಬಹುತೇಕ ಏನೂ ಅಗತ್ಯವಿಲ್ಲ (ಕೇವಲ ಕಾನ್ಫಿಗರೇಶನ್ ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಹೊಂದಿಸಿ max_parallel_workers
).
ಒಪ್ಪಿಕೊಳ್ಳಿ, ಅಪ್ಗ್ರೇಡ್ ಮಾಡಿದ ತಕ್ಷಣ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಿದಾಗ ಅದು ಅನುಕೂಲಕರವಾಗಿರುತ್ತದೆ. ಮತ್ತು ಬಳಕೆದಾರರನ್ನು ಮೆಚ್ಚಿಸಲು ನಾವು ತುಂಬಾ ಪ್ರಯತ್ನಿಸುತ್ತೇವೆ, ಏಕೆಂದರೆ PostgreSQL ಅವರಲ್ಲಿ ಹೆಚ್ಚಿನದನ್ನು ಹೊಂದಿದೆ.
ಹಾಗಾದರೆ PostgreSQL 12 ಗೆ ಸರಳವಾದ ಅಪ್ಗ್ರೇಡ್ ನಿಮಗೆ ಹೇಗೆ ಸಂತೋಷವನ್ನು ನೀಡುತ್ತದೆ? ನಾನು ಈಗ ಹೇಳುತ್ತೇನೆ.
ಪ್ರಮುಖ ಇಂಡೆಕ್ಸಿಂಗ್ ಸುಧಾರಣೆಗಳು
ಇಂಡೆಕ್ಸಿಂಗ್ ಇಲ್ಲದೆ, ಡೇಟಾಬೇಸ್ ದೂರ ಹೋಗುವುದಿಲ್ಲ. ಬೇರೆ ಹೇಗೆ ನೀವು ತ್ವರಿತವಾಗಿ ಮಾಹಿತಿಯನ್ನು ಕಂಡುಹಿಡಿಯಬಹುದು? PostgreSQL ನ ಮೂಲಭೂತ ಸೂಚಿಕೆ ವ್ಯವಸ್ಥೆಯನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ
ನಾವು ಆಪರೇಟರ್ ಅನ್ನು ಸರಳವಾಗಿ ಬಳಸುತ್ತೇವೆ CREATE INDEX ON some_table (some_column)
, ಮತ್ತು PostgreSQL ನಾವು ನಿರಂತರವಾಗಿ ಮೌಲ್ಯಗಳನ್ನು ಸೇರಿಸುವಾಗ, ನವೀಕರಿಸುವಾಗ ಮತ್ತು ಅಳಿಸುವಾಗ ಸೂಚ್ಯಂಕವನ್ನು ನವೀಕೃತವಾಗಿರಿಸಲು ಬಹಳಷ್ಟು ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಮಾಂತ್ರಿಕತೆಯಂತೆ ಎಲ್ಲವೂ ತನ್ನದೇ ಆದ ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಆದರೆ PostgreSQL ಸೂಚಿಕೆಗಳು ಒಂದು ಸಮಸ್ಯೆಯನ್ನು ಹೊಂದಿವೆ - ಅವುಗಳು
PostgreSQL 12 B-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಹೆಚ್ಚು ಸುಧಾರಿಸುತ್ತದೆ ಮತ್ತು TPC-C ನಂತಹ ಮಾನದಂಡಗಳ ಪ್ರಯೋಗಗಳು ಸರಾಸರಿ 40% ಕಡಿಮೆ ಜಾಗವನ್ನು ಈಗ ಬಳಸಲಾಗಿದೆ ಎಂದು ತೋರಿಸಿದೆ. ಈಗ ನಾವು ಬಿ-ಟ್ರೀ ಸೂಚ್ಯಂಕಗಳನ್ನು (ಅಂದರೆ, ಬರವಣಿಗೆಯ ಕಾರ್ಯಾಚರಣೆಗಳಲ್ಲಿ) ನಿರ್ವಹಿಸುವಲ್ಲಿ ಕಡಿಮೆ ಸಮಯವನ್ನು ಕಳೆಯುತ್ತೇವೆ, ಆದರೆ ದತ್ತಾಂಶವನ್ನು ಹಿಂಪಡೆಯಲು ಸಹ, ಏಕೆಂದರೆ ಸೂಚ್ಯಂಕಗಳು ತುಂಬಾ ಚಿಕ್ಕದಾಗಿದೆ.
ತಮ್ಮ ಕೋಷ್ಟಕಗಳನ್ನು ಸಕ್ರಿಯವಾಗಿ ನವೀಕರಿಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳು - ಸಾಮಾನ್ಯವಾಗಿ OLTP ಅಪ್ಲಿಕೇಶನ್ಗಳು (
ಕೆಲವು ಅಪ್ಗ್ರೇಡ್ ತಂತ್ರಗಳಿಗೆ ಈ ಪ್ರಯೋಜನಗಳ ಲಾಭವನ್ನು ಪಡೆಯಲು ಬಿ-ಟ್ರೀ ಇಂಡೆಕ್ಸ್ಗಳನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡಬೇಕಾಗುತ್ತದೆ (ಉದಾ.
PostgreSQL 12 ರಲ್ಲಿ ಸೂಚ್ಯಂಕ ಮೂಲಸೌಕರ್ಯಕ್ಕೆ ಇತರ ಸುಧಾರಣೆಗಳಿವೆ. ಕೆಲವು ಮ್ಯಾಜಿಕ್ ಇದ್ದ ಇನ್ನೊಂದು ವಿಷಯ -
PostgreSQL 12 ಸೂಚ್ಯಂಕ ನಿರ್ಮಾಣದ ಸಮಯದಲ್ಲಿ GiST, GIN ಮತ್ತು SP-GiST ಸೂಚಿಕೆಗಳಿಂದ ರಚಿಸಲಾದ WAL ದಾಖಲೆಗಳ ಓವರ್ಹೆಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಿದೆ. ಇದು ಹಲವಾರು ಸ್ಪಷ್ಟವಾದ ಪ್ರಯೋಜನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ: WAL ದಾಖಲೆಗಳು ಕಡಿಮೆ ಡಿಸ್ಕ್ ಜಾಗವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತವೆ, ಮತ್ತು ವಿಪತ್ತು ಮರುಪಡೆಯುವಿಕೆ ಅಥವಾ ಪಾಯಿಂಟ್-ಇನ್-ಟೈಮ್ ರಿಕವರಿ ಸಮಯದಲ್ಲಿ ಡೇಟಾವನ್ನು ವೇಗವಾಗಿ ಮರುಪಂದ್ಯ ಮಾಡಲಾಗುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ನೀವು ಅಂತಹ ಸೂಚಿಕೆಗಳನ್ನು ಬಳಸಿದರೆ (ಉದಾಹರಣೆಗೆ, PostGIS-ಆಧಾರಿತ ಜಿಯೋಸ್ಪೇಷಿಯಲ್ ಅಪ್ಲಿಕೇಶನ್ಗಳು GiST ಸೂಚಿಯನ್ನು ಬಹಳಷ್ಟು ಬಳಸುತ್ತವೆ), ಇದು ನಿಮ್ಮ ಕಡೆಯಿಂದ ಯಾವುದೇ ಪ್ರಯತ್ನವಿಲ್ಲದೆ ಅನುಭವವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಸುಧಾರಿಸುವ ಮತ್ತೊಂದು ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ.
ವಿಭಜನೆ - ದೊಡ್ಡದು, ಉತ್ತಮ, ವೇಗ
PostgreSQL 10 ಅನ್ನು ಪರಿಚಯಿಸಲಾಗಿದೆ
PostgreSQL 12 ರಲ್ಲಿ, ವಿಭಜನಾ ವ್ಯವಸ್ಥೆಯ ಕಾರ್ಯಕ್ಷಮತೆಯು ಗಮನಾರ್ಹವಾಗಿ ಉತ್ತಮವಾಗಿದೆ, ವಿಶೇಷವಾಗಿ ಟೇಬಲ್ನಲ್ಲಿ ಸಾವಿರಾರು ವಿಭಾಗಗಳಿದ್ದರೆ. ಉದಾಹರಣೆಗೆ, ಒಂದು ಪ್ರಶ್ನೆಯು ಟೇಬಲ್ನಲ್ಲಿ ಸಾವಿರಾರು ವಿಭಾಗಗಳನ್ನು ಹೊಂದಿರುವ ಕೆಲವು ವಿಭಾಗಗಳನ್ನು ಮಾತ್ರ ಪರಿಣಾಮ ಬೀರಿದರೆ, ಅದು ಹೆಚ್ಚು ವೇಗವಾಗಿ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತದೆ. ಈ ರೀತಿಯ ಪ್ರಶ್ನೆಗಳಿಗೆ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲಾಗಿಲ್ಲ. ಬಹು ವಿಭಾಗಗಳನ್ನು ಹೊಂದಿರುವ ಕೋಷ್ಟಕಗಳಲ್ಲಿ INSERT ಕಾರ್ಯಾಚರಣೆಗಳು ಎಷ್ಟು ವೇಗವಾಗಿವೆ ಎಂಬುದನ್ನು ಸಹ ನೀವು ಗಮನಿಸಬಹುದು.
ಬಳಸಿಕೊಂಡು ಡೇಟಾ ರೆಕಾರ್ಡಿಂಗ್
ಈ ಅನುಕೂಲಗಳಿಗೆ ಧನ್ಯವಾದಗಳು, PostgreSQL ನಿಮಗೆ ಇನ್ನೂ ದೊಡ್ಡ ಡೇಟಾ ಸೆಟ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ಅವುಗಳನ್ನು ಸುಲಭವಾಗಿ ಹಿಂಪಡೆಯಲು ಅನುಮತಿಸುತ್ತದೆ. ಮತ್ತು ನಿಮ್ಮ ಕಡೆಯಿಂದ ಯಾವುದೇ ಪ್ರಯತ್ನವಿಲ್ಲ. ಅಪ್ಲಿಕೇಶನ್ ಸಮಯ ಸರಣಿಯ ಡೇಟಾವನ್ನು ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುವಂತಹ ಅನೇಕ ವಿಭಾಗಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಸರಳವಾದ ನವೀಕರಣವು ಅದರ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಸುಧಾರಿಸುತ್ತದೆ.
ಇದು ನಿಖರವಾಗಿ "ಅಪ್ಗ್ರೇಡ್ ಮತ್ತು ಆನಂದಿಸಿ" ಸುಧಾರಣೆಯಾಗಿಲ್ಲದಿದ್ದರೂ, ವಿಭಜಿತ ಕೋಷ್ಟಕಗಳನ್ನು ಉಲ್ಲೇಖಿಸುವ ವಿದೇಶಿ ಕೀಗಳನ್ನು ರಚಿಸಲು PostgreSQL 12 ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ವಿಭಜನೆಯನ್ನು ಕೆಲಸ ಮಾಡಲು ಸಂತೋಷವಾಗುತ್ತದೆ.
ಪ್ರಶ್ನೆಗಳೊಂದಿಗೆ ಕೇವಲ ಬಹಳಷ್ಟು ಉತ್ತಮವಾಗಿದೆ
ಯಾವಾಗ
ನಾನು ಸಾಮಾನ್ಯವಾಗಿ SQL ಗೆ ಹೊಸಬರು CTE ಗಳನ್ನು ಬಳಸಲು ಇಷ್ಟಪಡುತ್ತೀರಿ ಎಂದು ನೀವು ಒಂದು ನಿರ್ದಿಷ್ಟ ರೀತಿಯಲ್ಲಿ ಬರೆದರೆ, ನೀವು ಕಡ್ಡಾಯವಾದ ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಬರೆಯುತ್ತಿರುವಂತೆ ಭಾಸವಾಗುತ್ತದೆ. ವೈಯಕ್ತಿಕವಾಗಿ, ನಾನು ಸುತ್ತಲು ಈ ಪ್ರಶ್ನೆಗಳನ್ನು ಪುನಃ ಬರೆಯಲು ಇಷ್ಟಪಟ್ಟಿದ್ದೇನೆ ಇಲ್ಲದೆ CTE ಮತ್ತು ಉತ್ಪಾದಕತೆಯನ್ನು ಹೆಚ್ಚಿಸಿ. ಈಗ ಎಲ್ಲವೂ ವಿಭಿನ್ನವಾಗಿದೆ.
PostgreSQL 12 ಅಡ್ಡ ಪರಿಣಾಮಗಳಿಲ್ಲದೆ ನಿರ್ದಿಷ್ಟ ರೀತಿಯ CTE ಅನ್ನು ಇನ್ಲೈನ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ (SELECT
), ಇದು ವಿನಂತಿಯ ಕೊನೆಯಲ್ಲಿ ಒಮ್ಮೆ ಮಾತ್ರ ಬಳಸಲ್ಪಡುತ್ತದೆ. ನಾನು ಪುನಃ ಬರೆದ CTE ಪ್ರಶ್ನೆಗಳನ್ನು ನಾನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿದ್ದರೆ, ಅವುಗಳಲ್ಲಿ ಹೆಚ್ಚಿನವು ಈ ವರ್ಗಕ್ಕೆ ಸೇರುತ್ತವೆ. ಇದು ಡೆವಲಪರ್ಗಳಿಗೆ ಸ್ಪಷ್ಟ ಕೋಡ್ ಅನ್ನು ಬರೆಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಅದು ಈಗ ತ್ವರಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.
ಇದಲ್ಲದೆ, PostgreSQL 12 ನೀವು ಏನನ್ನೂ ಮಾಡದೆಯೇ SQL ಎಕ್ಸಿಕ್ಯೂಶನ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುತ್ತದೆ. ಮತ್ತು ನಾನು ಬಹುಶಃ ಈಗ ಅಂತಹ ಪ್ರಶ್ನೆಗಳನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವ ಅಗತ್ಯವಿಲ್ಲದಿದ್ದರೂ, PostgreSQL ಪ್ರಶ್ನೆ ಆಪ್ಟಿಮೈಸೇಶನ್ನಲ್ಲಿ ಕೆಲಸ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸುವುದು ಅದ್ಭುತವಾಗಿದೆ.
ಜಸ್ಟ್-ಇನ್-ಟೈಮ್ (JIT) - ಈಗ ಡೀಫಾಲ್ಟ್
ಬೆಂಬಲದೊಂದಿಗೆ PostgreSQL 12 ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ
PostgreSQL 12 ರಲ್ಲಿ JIT ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಲ್ಪಟ್ಟಿರುವುದರಿಂದ, ಕಾರ್ಯಕ್ಷಮತೆ ತನ್ನದೇ ಆದ ಮೇಲೆ ಸುಧಾರಿಸುತ್ತದೆ, ಆದರೆ JIT ಅನ್ನು ಪರಿಚಯಿಸಿದ PostgreSQL 11 ನಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಲು ನಾನು ಶಿಫಾರಸು ಮಾಡುತ್ತೇವೆ, ಪ್ರಶ್ನೆಯ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಅಳೆಯಲು ಮತ್ತು ನೀವು ಏನನ್ನಾದರೂ ಟ್ಯೂನ್ ಮಾಡಬೇಕೇ ಎಂದು ನೋಡಲು.
PostgreSQL 12 ನಲ್ಲಿನ ಉಳಿದ ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳ ಬಗ್ಗೆ ಏನು?
PostgreSQL 12 ಸ್ಟಾಂಡರ್ಡ್ SQL/JSON ರೂಟ್ ಎಕ್ಸ್ಪ್ರೆಶನ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು JSON ಡೇಟಾವನ್ನು ಪರೀಕ್ಷಿಸುವ ಸಾಮರ್ಥ್ಯದಿಂದ ಹಿಡಿದು ಪ್ಯಾರಾಮೀಟರ್ನೊಂದಿಗೆ ಬಹು-ಅಂಶದ ದೃಢೀಕರಣದವರೆಗೆ ಹಲವಾರು ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿದೆ. clientcert=verify-full
, ಕಾಲಮ್ಗಳನ್ನು ರಚಿಸಲಾಗಿದೆ ಮತ್ತು ಇನ್ನಷ್ಟು. ಪ್ರತ್ಯೇಕ ಪೋಸ್ಟ್ಗೆ ಸಾಕು.
PostgreSQL 10 ನಂತೆ, PostgreSQL 12 ಅಪ್ಗ್ರೇಡ್ ಮಾಡಿದ ತಕ್ಷಣ ಒಟ್ಟಾರೆ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ. ನೀವು ಸಹಜವಾಗಿ, ನಿಮ್ಮದೇ ಆದ ಮಾರ್ಗವನ್ನು ಹೊಂದಬಹುದು - ನಾನು PostgreSQL 10 ನೊಂದಿಗೆ ಮಾಡಿದಂತೆ ಸುಧಾರಣೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಮೊದಲು ಉತ್ಪಾದನಾ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಇದೇ ರೀತಿಯ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಿ. PostgreSQL 12 ಈಗಾಗಲೇ ನಾನು ನಿರೀಕ್ಷಿಸಿದ್ದಕ್ಕಿಂತ ಹೆಚ್ಚು ಸ್ಥಿರವಾಗಿದ್ದರೂ ಸಹ, ಪರೀಕ್ಷೆಯಲ್ಲಿ ಸೋಮಾರಿಯಾಗಬೇಡಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ, ಉತ್ಪಾದನೆಗೆ ಬಿಡುಗಡೆ ಮಾಡುವ ಮೊದಲು.
ಮೂಲ: www.habr.com