{"id":483749,"date":"2026-06-15T22:53:39","date_gmt":"2026-06-15T22:53:39","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=483749"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=483749","title":{"rendered":"MVCC \u0431\u0435\u0437 VACUUM: \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u0430\u043b UNDO-\u043b\u043e\u0433, \u043a\u0430\u043a\u0443\u044e \u0446\u0435\u043d\u0443 \u043c\u044b \u0437\u0430\u043f\u043b\u0430\u0442\u0438\u043b\u0438 \u0438 \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c 5 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041c\u044b \u043f\u0438\u0448\u0435\u043c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Rust. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b: <a href=\"https:\/\/habr.com\/ru\/articles\/1030822\/\" rel=\"noopener noreferrer nofollow\">Buffer Pool \u0441 Clock-sweep \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0435\u0439 \u0441\u043a\u0430\u043d\u043e\u0432<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1032894\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0441 \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438<\/a>. \u042d\u0442\u043e \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u0440\u0443\u0433\u0430\u044f. \u041e\u043d\u0430 \u043f\u0440\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0436\u0438\u0432\u0451\u043c \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440: MVCC \u043d\u0430 UNDO-\u043b\u043e\u0433\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 heap, \u043a\u0430\u043a \u0443 PostgreSQL. \u041c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u0430\u043b\u043e, \u0433\u0434\u0435 \u043d\u0430\u0448\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0437\u0443\u043d\u0433\u0438 \u0440\u0430\u0437\u043e\u0448\u043b\u0438\u0441\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u0438 \u043a\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0435\u0449\u0451 \u0432\u043f\u0435\u0440\u0435\u0434\u0438. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u0438 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e MVCC-\u0441\u043b\u043e\u0451\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u0432\u0430 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u2014 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0439\u0434\u0451\u043c \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443.<\/p>\n<p>\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0444\u0440\u0430\u0437\u0430 \u00ab\u043d\u0435\u0442 VACUUM \u2014 \u043d\u0435\u0442 bloat\u00bb \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0440\u0430\u043d\u043d\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u2014 \u043f\u0440\u043e \u0442\u043e, \u0447\u0435\u043c \u0437\u0430 UNDO \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0438\u0442\u044c.<\/p>\n<p><strong>\u0427\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438:<\/strong> heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0440\u043e\u043a\u0438; \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 append-only UNDO store (\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0444\u0430\u0439\u043b\u044b <code>.aud<\/code>); \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0443; rollback \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u043e \u0435\u0451 UNDO-\u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0441 CLR \u0432 WAL; ARIES-style undo pass \u043d\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438; \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0435 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435; \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f UPDATE, \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438; GC UNDO-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e watermark; \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u044b \u0434\u043b\u044f \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 heap \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 tombstones. <strong>\u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u043e:<\/strong> \u0435\u0434\u0438\u043d\u044b\u0439 GC-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 (\u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432); state-based \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0433\u043e GC; \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0442\u043e\u0432 \u0432 in-memory \u0430\u0440\u0435\u043d\u0435 \u0432\u0435\u0440\u0441\u0438\u0439.<\/p>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c. \u0412\u0441\u0435 \u0446\u0438\u0444\u0440\u044b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0442\u0435\u043d\u0434\u0435: \u043e\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u0430, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0440\u0430\u0434\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0430 \u043d\u0435 \u043a\u0430\u043a \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0417\u0434\u0435\u0441\u044c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u2014 \u0441 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u043c \u0441\u0442\u0435\u043d\u0434\u043e\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u043e\u0439 \u2014 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u044b.<\/p>\n<p><strong>\u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0433\u0434\u0430, \u0432\u0441\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445:<\/strong> UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442 bloat \u0438\u0437 heap \u2014 \u043d\u043e \u043d\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u0435\u0433\u043e, \u0430 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b \u0438 \u0441\u0430\u043c UNDO-\u043b\u043e\u0433. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0446\u0435\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u043b\u0447\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443. \u0410 GC \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u043f\u044f\u0442\u044c, \u0438 \u043c\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u0432\u043e\u0434\u0438\u043c \u0438\u0445 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u0443.<\/p>\n<hr\/>\n<h3>\u041a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e: heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435<\/h3>\n<p>\u0412 PostgreSQL \u0441\u0442\u0430\u0440\u0430\u044f \u0438 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0440\u044f\u0434\u043e\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. UPDATE \u2014 \u044d\u0442\u043e INSERT \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043b\u044e\u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u0441\u0442\u0430\u0440\u043e\u0439, \u0430 VACUUM \u043f\u043e\u0442\u043e\u043c \u0445\u043e\u0434\u0438\u0442 \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0447\u0430\u044f, \u043d\u043e \u0446\u0435\u043d\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u043a\u0442\u043e \u0432\u0438\u0434\u0435\u043b \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0440\u0430\u0441\u043f\u0443\u0445\u0448\u0443\u044e \u0432\u0434\u0432\u043e\u0435 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041c\u044b \u043f\u043e\u0448\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 (\u0435\u0451 \u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 InnoDB \u0438 Oracle): heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e, \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 append-only UNDO store.<\/p>\n<pre><code>Heap (.adb)      \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 + \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438UNDO (.aud)      append-only \u0438\u0441\u0442\u043e\u0440\u0438\u044f: pre-image \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 UPDATE\/DELETE\u0427\u0442\u0435\u043d\u0438\u0435 snapshot  \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0432 heap \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u043e\u0432\u0430\u044f \u2014 \u0440\u0430\u0437\u043c\u043e\u0442\u0430\u0442\u044c UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0443GC               \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0445\u0432\u043e\u0441\u0442 UNDO \u043f\u043e watermark, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e tuple \u0432 heap \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435: <code>created_commit<\/code>, <code>deleted_commit<\/code> \u0438 <code>undo_chain_head_ptr<\/code> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0433\u043e\u043b\u043e\u0432\u0443 \u0435\u0433\u043e UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0438. \u0421\u0430\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 u64 \u043a\u0430\u043a <code>[segment_id:24][byte_offset:40]<\/code>: \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e.<\/p>\n<p>UNDO-\u0437\u0430\u043f\u0438\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0414\u043b\u044f UPDATE, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0432\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438\u0437 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438, \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0440\u0430\u0441\u0442\u043e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0434\u0435\u043b\u044c\u0442\u044b:<\/p>\n<pre><code class=\"rust\">pub enum UndoDelta {    FullRow(Vec&lt;Value&gt;),    ColumnDelta(Vec&lt;(u16, Value)&gt;), \/\/ (column_index, old_value)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 <code>ColumnDelta<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043c\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0435 16 \u0432\u0435\u0440\u0441\u0438\u0439 \u043c\u044b \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439. \u0412 \u043a\u043e\u0434 \u0434\u0430\u0436\u0435 \u0437\u0430\u0448\u0438\u0442 \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c: \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 <code>2 \u00d7 16 + 4<\/code> \u0448\u0430\u0433\u043e\u0432 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0430 \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0421\u0430\u043c\u043e \u0447\u0438\u0441\u043b\u043e 16 \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0451\u043c\u043e\u043c UNDO \u0438 worst-case \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u0435\u043d\u0438\u044f; \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0434 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0426\u0435\u043b\u0438\u043a\u043e\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0442\u0430\u043a\u0430\u044f:<\/p>\n<pre><code>heap (.adb) \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 \u0441\u0442\u0440\u043e\u043a\u0430 \u00b7 created_commit \u00b7 undo_chain_head_ptr \u2500\u2500\u2510 \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502\u2500\u2518                                                  \u25bcUNDO (.aud) \u2014 append-only \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043d\u043e\u0432\u0435\u0435 \u2192 \u0441\u0442\u0430\u0440\u0435\u0435\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 ColumnDelta \u2502 \u2500\u25b6 \u2502 ColumnDelta \u2502 \u2500\u25b6 \u2026 \u2500\u25b6 \u2502 FullRow     \u2502\u2502 commit=42   \u2502    \u2502 commit=37   \u2502         \u2502 commit=21   \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                          \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 16 \u0432\u0435\u0440\u0441\u0438\u0439 \u2014                          \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c \u2014 \u0432 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 (\u0434\u0435\u0442\u0430\u043b\u0438 \u0432\u0440\u043e\u0434\u0435 \u0434\u0435\u043b\u044c\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0443\u0449\u0435\u043d\u044b):<\/p>\n<pre><code class=\"rust\">fn read_at(tid: TupleId, snapshot: u64) -&gt; Option&lt;Row&gt; {    let (row, meta) = heap.get(tid);    if visible(&amp;meta, snapshot) {        return Some(row);                    \/\/ fast path: \u0432 UNDO \u043d\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u043c    }    let mut ptr = meta.undo_chain_head_ptr;  \/\/ slow path: \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e    let mut image = row;    while ptr != UNDO_PTR_NULL {        let rec = undo.get(ptr);        image = apply_delta(image, rec.delta);        if rec.commit_ts &lt;= snapshot {            return Some(image);              \/\/ \u043d\u0430\u0448\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044e, \u0432\u0438\u0434\u0438\u043c\u0443\u044e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443        }        ptr = rec.prev;    }    None  \/\/ \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435: \u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u043b\u0430\u0442\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442, \u043a\u0442\u043e \u0435\u0451 \u0447\u0438\u0442\u0430\u0435\u0442. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0441\u043e \u0441\u0432\u0435\u0436\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 UNDO \u0432\u043e\u043e\u0431\u0449\u0435. \u0412 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 UPDATE \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 UNDO \u043e\u043a\u043e\u043b\u043e 159 \u0431\u0430\u0439\u0442 \u2014 \u0438 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0446\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043b\u0430\u0442\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c.<\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u043c \u0434\u0430\u043b\u0430<\/h3>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043d\u0435 \u0442\u0435\u043e\u0440\u0438\u044f, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0438 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0440\u0436\u0438\u043c\u0441\u044f.<\/p>\n<h4>Rollback \u2014 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430, \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/h4>\n<p>ROLLBACK \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0431\u0435\u0440\u0451\u0442. \u041e\u043d \u0431\u0435\u0440\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a UNDO-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u043e\u0442 \u043d\u043e\u0432\u0435\u0439\u0448\u0435\u0439 \u043a \u0441\u0442\u0430\u0440\u0435\u0439\u0448\u0435\u0439), \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0438\u0448\u0435\u0442 CLR \u0432 WAL (compensation log record \u2014 \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u00ab\u044d\u0442\u043e\u0442 \u043e\u0442\u043a\u0430\u0442 \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u00bb, \u0447\u0442\u043e\u0431\u044b recovery \u043d\u0435 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u043b \u0434\u0432\u0430\u0436\u0434\u044b) \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0435\u043b\u044c\u0442\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a heap. \u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0430\u0442\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430 \u0442\u043e\u043c\u0443, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0430 \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<h4>Recovery \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0435\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u044b\u043c<\/h4>\n<p>\u041f\u0440\u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0440\u0451\u0445\u0444\u0430\u0437\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430: analysis, redo, undo. Undo pass \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c \u0438 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435 \u0436\u0435 UNDO-\u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 SIGKILL \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0436\u0435 \u0432 heap, \u0430 \u0435\u0451 UNDO \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0435\u0445\u0430\u043b: \u0442\u0430\u043a\u0438\u0435 \u0444\u0430\u043d\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (<code>created_commit<\/code> \u0432\u044b\u0448\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438) recovery \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u042d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u043c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0430 \u0433\u0440\u0443\u0431\u043e\u0435 \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u2014 SIGKILL-\u0442\u0435\u0441\u0442\u044b \u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e suite \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0439 shutdown \u0442\u0430\u043a\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442.<\/p>\n<h4>Snapshot too old \u2014 \u0447\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0430 \u043d\u0435 \u0442\u0438\u0445\u043e\u0435 \u0432\u0440\u0430\u043d\u044c\u0451<\/h4>\n<p>UNDO \u043d\u0435\u043b\u044c\u0437\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0447\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u043e\u043d \u0441\u0430\u043c \u0441\u0442\u0430\u043d\u0435\u0442 bloat\u2019\u043e\u043c. \u0415\u0433\u043e \u0445\u0432\u043e\u0441\u0442 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044f \u043f\u043e watermark \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443 \u0441\u0440\u0435\u0434\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439. \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442 \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e GC \u0443\u0436\u0435 \u043e\u0442\u0440\u0435\u0437\u0430\u043b?<\/p>\n<p>\u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 fail-closed: \u043e\u0448\u0438\u0431\u043a\u0430 <code>snapshot too old<\/code> (SQLSTATE 72000) \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0438\u0445\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0438 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u00ab\u043d\u0435 \u0437\u043d\u0430\u044e\u00bb \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u043b\u0447\u0430 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c. \u0414\u0430, \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u0447\u0442\u043e \u0438 Oracle \u0441 <code>ORA-01555<\/code> \u2014 \u0438 \u0443 \u043d\u0430\u0441 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u043e\u0434\u0443\u0448\u0438\u044f. \u041d\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c GC \u0440\u0430\u0434\u0438 \u0434\u043e\u043b\u0433\u0438\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u2014 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0435\u0449\u0451 \u043c\u0435\u043d\u044c\u0448\u0435: \u043e\u0434\u043d\u0430 \u0437\u0430\u0431\u044b\u0442\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438 \u043c\u044f\u0433\u043a\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430: \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0441\u0442\u0430\u0440\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 warn\/hard \u043b\u0438\u043c\u0438\u0442\u044b \u043d\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044f\u0434\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435, \u2014 \u043d\u0430\u043c \u043f\u0440\u0430\u0432\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<h4>\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 TID: UPDATE, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/h4>\n<p>\u042d\u0442\u043e \u043a\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u043b\u0451\u0433 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0430 \u043d\u0430 heap-\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e.<\/p>\n<p>\u041f\u0440\u0438 in-place UPDATE \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0451\u043c \u0441\u043b\u043e\u0442\u0435 \u2014 \u0435\u0451 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (TID) \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0410 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 TID. \u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435: \u0435\u0441\u043b\u0438 UPDATE \u043d\u0435 \u0442\u0440\u043e\u043d\u0443\u043b \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c <strong>\u043d\u0438 \u043e\u0434\u0438\u043d<\/strong> \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u2014 \u0432\u0441\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u043e\u043c\u043d\u044f\u0442 \u043f\u043e\u0441\u0442 Uber 2016 \u0433\u043e\u0434\u0430 \u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u0441 PostgreSQL: \u043e\u0434\u043d\u0430 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0439 \u0431\u044b\u043b\u0430 \u0440\u043e\u0432\u043d\u043e \u043a \u044d\u0442\u043e\u043c\u0443. \u0412 PG \u043a\u0430\u0436\u0434\u044b\u0439 UPDATE \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 tuple \u0441 \u043d\u043e\u0432\u044b\u043c <code>ctid<\/code>, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f HOT \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f <strong>\u0432\u0441\u0435<\/strong> \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435, \u0447\u044c\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c. \u0410 HOT \u0442\u0430\u043c \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u0444\u0438\u0437\u0438\u043a\u043e\u0439: \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043b\u0435\u0437\u0442\u044c \u043d\u0430 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 heap. \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u2014 \u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e.<\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430 \u0447\u0438\u0441\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435: \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u041c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0432\u0441\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0439 \u0432 heap \u2014 \u0441\u0442\u0430\u0440\u0430\u044f \u0443\u0435\u0445\u0430\u043b\u0430 \u0432 UNDO. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c pre-image \u0438 post-image \u043f\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 <code>IS DISTINCT FROM<\/code> (\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439 <code>NaN -&gt; NaN<\/code>: \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 IEEE 754 NaN \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435, \u043d\u043e \u0434\u043b\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c\u00bb \u2014 \u043c\u044b \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043b\u0438 fail-closed \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c), \u0434\u043b\u044f expression-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 fail-closed fallback \u0441 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u0430 \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0442 (\u0432\u044b\u0440\u043e\u0441\u043b\u0430) \u2014 guard \u043f\u043e TID \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0451 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0424\u043b\u0430\u0433 \u00ab\u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b\u00bb \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 UNDO-\u0437\u0430\u043f\u0438\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0430\u0442 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h4>\u0426\u0435\u043d\u0430 \u0441\u043a\u0430\u043d\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439<\/h4>\n<p>\u0420\u0430\u0437 heap \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0438\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0430\u043d \u0447\u0438\u0442\u0430\u0435\u0442 O(\u0436\u0438\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a) \u2014 \u0432\u0441\u0435\u0433\u0434\u0430. \u0412 heap-\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e UPDATE <code>count(*)<\/code> \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0434\u0432\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043f\u043e\u043a\u0430 \u0432\u0430\u043a\u0443\u0443\u043c \u043d\u0435 \u0434\u043e\u0433\u043e\u043d\u0438\u0442: \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043f\u043b\u0430\u0432\u0430\u0435\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0444\u0430\u0437\u044b \u043e\u0447\u0438\u0441\u0442\u043a\u0438. \u0423 \u043d\u0430\u0441 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u0432\u0435\u0440\u0445 OLTP-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435 \u0434\u043e\u0440\u043e\u0436\u0430\u0435\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0451 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442. \u0414\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a HTAP (\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0440\u044f\u0434\u043e\u043c \u0441 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438, \u043e\u0431 \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0448\u043b\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f), \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441, \u0430 \u043f\u043e\u0447\u0442\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u2014 \u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 UNDO-\u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<h4>\u0418\u043d\u0434\u0435\u043a\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0430\u043c<\/h4>\n<p>\u042d\u0442\u043e \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 UNDO-\u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043e\u0446\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435.<\/p>\n<p>\u0412 PostgreSQL \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445: \u043d\u0430\u0448\u0451\u043b \u043a\u043b\u044e\u0447 \u2014 \u0438\u0434\u0438 \u0432 heap \u0438 \u0442\u0430\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0439\u0441\u044f, \u0432\u0438\u0434\u0438\u043c\u0430 \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0432\u043e\u0435\u043c\u0443 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443 (visibility map \u0441\u043c\u044f\u0433\u0447\u0430\u0435\u0442 \u044d\u0442\u043e, \u043d\u043e \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u2014 \u0434\u0430\u0436\u0435 Index-Only Scan \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 heap \u0437\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438; \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u00ab\u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u044b\u00bb \u2014 \u0438\u0434\u0451\u0448\u044c). \u0412 \u043d\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0434\u0432\u043e\u0439\u043d\u0435: heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0438 \u0435\u0441\u043b\u0438 \u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u0442\u0434\u0430\u0432\u0430\u043b \u00ab\u0433\u043e\u043b\u044b\u0435\u00bb \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0449\u0451 \u0438 \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0432\u0438\u0434\u043d\u0430 \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 (\u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0432 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u043a\u0430\u043a MV-PBT, multi-version B-Tree): \u043a\u0430\u0436\u0434\u0430\u044f \u043b\u0438\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435\u0441\u0451\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 <code>xmin<\/code>\/<code>xmax<\/code> \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435. UPDATE \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u0443\u044e <code>xmax<\/code>, \u0430 \u043f\u043e\u0438\u0441\u043a (<code>lookup_visible_at<\/code>, <code>range_scan_visible_at<\/code>) \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0412 heap \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043d\u043e \u043d\u0435 \u0437\u0430 \u0432\u0435\u0440\u0434\u0438\u043a\u0442\u043e\u043c \u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u043d\u0430 v2-\u043f\u0443\u0442\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u00ab\u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u0432 heap \u0440\u0430\u0434\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\u00bb \u0443 \u043d\u0430\u0441 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0443\u043b\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043d\u044b\u0445 \u0441\u043a\u0430\u043d\u043e\u0432 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e: \u0441\u043a\u0430\u043d \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f heap \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u044e\u0447. \u041d\u043e \u0443 \u044d\u0442\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0446\u0435\u043d\u0430, \u0438 \u043e \u043d\u0435\u0439 \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b.<\/p>\n<h4>Heap \u043d\u0435 \u043f\u0443\u0445\u043d\u0435\u0442 \u043e\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439<\/h4>\n<p>\u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0440\u0430\u0437 \u0432\u044b \u043d\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0443, \u0432 heap \u043e\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u043c\u0435\u0441\u0442\u043e, \u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0436\u0438\u0432\u0451\u0442 \u0432 UNDO \u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044f \u043f\u043e watermark. \u041d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435 UNDO-\u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0441\u0442\u0443\u0442 \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u043e\u0442 write-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0443\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u043f\u0440\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0442\u043e\u0433\u043e \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430.<\/p>\n<hr\/>\n<h3>\u0427\u0435\u043c \u043c\u044b \u043f\u043b\u0430\u0442\u0438\u043c \u0437\u0430 UNDO<\/h3>\n<p>\u00ab\u041d\u0435\u0442 VACUUM \u2014 \u043d\u0435\u0442 bloat\u00bb \u2014 \u0442\u0430\u043a \u043c\u044b \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0440\u0430\u043d\u043d\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445. \u0414\u043b\u044f heap \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0439, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0435 \u0440\u0430\u0441\u0442\u0451\u0442. \u041d\u043e heap \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043b\u043e\u0451\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0438 \u0443 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0447\u0451\u0442 \u0441\u0432\u043e\u0439.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u2014 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0432\u044b\u0448\u0435. UPDATE \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u0441\u0442\u0430\u0440\u0430\u044f \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f <code>xmax<\/code> \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0451\u0440\u0442\u0432\u043e\u0439. \u041f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u2014 \u043d\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043f\u043e\u043a\u0430 \u0435\u0451 \u043d\u0435 \u0443\u0431\u0435\u0440\u0451\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0430. UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043f\u0430\u0441\u0430\u0435\u0442 heap, \u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0439, \u0438 \u043f\u0440\u043e \u0435\u0433\u043e \u043e\u0447\u0438\u0441\u0442\u043a\u0443 UNDO-\u043b\u043e\u0433 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e. \u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u00ab\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u0438\u0441\u0442\u0435\u00bb \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u0442\u043e\u0436\u0435 \u043d\u0430 \u043b\u0438\u0441\u0442\u0435.<\/p>\n<p>\u041c\u044b \u0443\u0437\u043d\u0430\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0438\u0437 \u0442\u0435\u043e\u0440\u0438\u0438. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0430\u0443\u0434\u0438\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 \u0442\u0440\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u0434 UPDATE-heavy \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c \u0440\u0430\u0437\u0434\u0443\u043b\u0430 \u0444\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u043e 90 \u0413\u0411 \u2014 \u043f\u0440\u0438 \u0442\u043e\u043c \u0447\u0442\u043e heap \u0432\u0451\u043b \u0441\u0435\u0431\u044f \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0441\u044c \u0440\u043e\u0441\u0442 \u043f\u0440\u0438\u0448\u0451\u043b\u0441\u044f \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u2014 <code>gc_compact_versions_removed_total<\/code> \u2014 \u0437\u0430 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0433\u043e\u043d \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0440\u043e\u0432\u043d\u043e \u043d\u043e\u043b\u044c: \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 GC \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b, \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043f\u0438\u043b\u0438\u0441\u044c \u0431\u0435\u0441\u0441\u0440\u043e\u0447\u043d\u043e. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0435\u0441\u0442\u044c (\u043e \u043d\u0435\u0439 \u043d\u0438\u0436\u0435), \u043d\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0446\u0438\u0444\u0440 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c: \u043f\u043e\u0434 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0441\u0442\u0443\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0430 \u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0438 \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u043d\u0435 \u0431\u0430\u0433.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u2014 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b heap. UPDATE \u0442\u043e\u0439 \u0436\u0435 \u0434\u043b\u0438\u043d\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, DELETE \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 (soft-delete \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430). \u041d\u043e \u0432\u044b\u0440\u043e\u0441\u0448\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0442, \u0430 \u0441\u0442\u0430\u0440\u044b\u0439 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0451\u0440\u0442\u0432\u044b\u043c \u0438 \u0436\u0434\u0451\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430. \u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 MVCC, \u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u2014 \u043e\u0442 \u043d\u0435\u0451 \u043d\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b \u043d\u0438 InnoDB, \u043d\u0438 Oracle (row migration), \u2014 \u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430 \u043d\u0435\u0439 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0430\u0434\u043e.<\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u044f \u2014 \u0441\u0430\u043c UNDO: \u043a\u0430\u0436\u0434\u044b\u0439 UPDATE\/DELETE \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 pre-image, \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0436\u0438\u0432\u0451\u0442 \u0440\u043e\u0432\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0451 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442. \u0427\u0435\u043c \u044d\u0442\u043e \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u044c, \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0433\u043b\u0430\u0432\u0430 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c bloat \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0441\u044f. \u041e\u043d \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0438\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u00ab\u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u00bb, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0435\u0448\u0430\u0435\u0442 UNDO, \u0432 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u00ab\u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438\u00bb \u0438 \u00ab\u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b heap\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 UNDO \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u043e\u0431\u0430 \u0441\u043b\u043e\u044f \u0435\u0441\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u044b: \u043e\u0434\u0438\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 heap-\u0441\u043b\u043e\u0442\u044b \u0447\u0435\u0440\u0435\u0437 reclaim-\u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0438\u0441\u0442\u0438\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 tombstones \u2014 \u043f\u043b\u044e\u0441 \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043c\u0438\u043c\u043e \u0441\u043a\u0430\u043d \u043f\u0440\u0438\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a: \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443 \u0438\u043b\u0438 \u043f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u043e\u0442 DML-\u043f\u0443\u0442\u0438, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 N \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442; \u0443\u0441\u0435\u0447\u0435\u043d\u0438\u0435 UNDO, \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 GC \u0438 compaction \u043a\u043e\u043b\u043e\u043d\u043e\u0447\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0441\u0432\u043e\u0451\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e. \u0418 \u0442\u0443\u0442 \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u043f\u0440\u0438\u0443\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c: \u044d\u0442\u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u0435\u043b\u044f\u0442 \u0442\u0435 \u0436\u0435 \u044f\u0434\u0440\u0430, \u0447\u0442\u043e \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u043e CPU \u043d\u0435\u0442. \u041e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u044b\u0433\u0440\u0435\u0431\u043b\u0430 \u0432\u0441\u0451 I\/O \u0440\u0430\u0437\u043e\u043c \u0438 \u0437\u0430\u0436\u0430\u043b\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u044e\u0434\u0436\u0435\u0442: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u00ab\u0441\u0442\u043e\u043b\u044c\u043a\u043e-\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0437\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u00bb \u0438 \u0441\u043e\u043d \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0445\u043e\u0434\u0430\u043c\u0438. \u041f\u043b\u044e\u0441 \u043a \u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0433\u043e GC \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u043d\u0435 \u043f\u043e \u0434\u043e\u043b\u0435 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0434 burst-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043e\u043d \u043e\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043c\u044b \u0441\u0430\u043c\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0433\u043b\u0443\u0431\u043e\u043a\u043e: \u00ab\u0443\u0431\u0440\u0430\u043b\u0438 bloat \u0438\u0437 heap \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u0443\u0431\u0440\u0430\u043b\u0438 bloat\u00bb. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u00ab\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 X \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 bloat\u00bb, \u0441\u0442\u043e\u0438\u0442 \u0443\u0442\u043e\u0447\u043d\u044f\u0442\u044c, \u043f\u0440\u043e \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437 \u0441\u043b\u043e\u0451\u0432 \u0440\u0435\u0447\u044c. \u0412 \u0431\u0430\u0437\u0435 \u0438\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0447\u0435\u0442\u044b\u0440\u0435, \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u044f \u0436\u0438\u0437\u043d\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0440\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<hr\/>\n<h3>\u0423\u0442\u0451\u043a\u0448\u0430\u044f \u044d\u043f\u043e\u0445\u0430, \u0438\u043b\u0438 \u043a\u0430\u043a \u043e\u0434\u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430 GC<\/h3>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u2014 \u043f\u0440\u043e watermark.<\/p>\n<p>GC UNDO-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u0432\u043e\u044e \u00ab\u044d\u043f\u043e\u0445\u0443\u00bb \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438 \u0441\u043d\u0438\u043c\u0430\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0438 commit \u0438\u043b\u0438 abort. Watermark \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u044d\u043f\u043e\u0445\u0430\u043c.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043f\u0440\u043e\u0441: \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u043c\u0435\u0440\u043b\u043e, \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0432 \u043d\u0438 commit, \u043d\u0438 abort?<\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: \u044d\u043f\u043e\u0445\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, watermark \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442, UNDO \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0443\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0441\u0442\u0451\u0442 \u0434\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \u041c\u044b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u043d\u0430 \u044d\u0442\u043e \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439: \u043e\u0434\u0438\u043d \u0443\u0442\u0451\u043a\u0448\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u2014 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u0444\u0430\u0439\u043b\u044b UNDO \u0437\u0430\u043d\u044f\u043b\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0438\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u0437\u0430\u043d\u044f\u0442\u044c. \u0421\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043b\u0435\u0447\u0438\u0442\u0441\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 epoch reaper \u0438 warn-\u043b\u0438\u043c\u0438\u0442\u043e\u0432 \u2014 \u043e\u043d\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0441\u0442\u0440\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439. \u0420\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u2014 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u0431\u044d\u043a\u043b\u043e\u0433\u0435.<\/p>\n<p>\u041b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u0432\u0443\u0445\u0441\u043b\u043e\u0439\u043d\u044b\u043c. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u043e\u0439 \u2014 reaper (\u043f\u043e\u043a\u0430 opt-in, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u044d\u043f\u043e\u0445\u0438 \u0431\u0435\u0437 \u0436\u0438\u0432\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0445 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0439 \u2014 \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u043b\u0438\u043c\u0438\u0442\u044b \u043d\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 warning \u0432 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435. \u041f\u043e\u043b\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u2014 reaper \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u0443\u0442\u0435\u0447\u043a\u0438 \u044d\u043f\u043e\u0445\u0438, \u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0451. \u042d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u044d\u043a\u043b\u043e\u0433\u0435, \u0438 \u043c\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u043c\u0441\u044f \u043a \u043d\u0435\u0439 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e: \u043f\u043e\u043a\u0430 \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0430, watermark \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0430 \u043d\u0435 \u043e\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0434\u0432\u0438\u0436\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 MVCC-\u0431\u0430\u0437\u044b \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u0423 PostgreSQL \u044d\u0442\u043e <code>idle_in_transaction_session_timeout<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d, \u0438 \u0432\u0430\u043a\u0443\u0443\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u043b\u0447\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0443\u0431\u0438\u0440\u0430\u0442\u044c. \u041d\u0430\u0448\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438, \u043d\u043e \u043d\u0435 \u0441\u0443\u0442\u044c\u044e: \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u2014 \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0435\u0433\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c.<\/p>\n<hr\/>\n<h3>GC \u2014 \u044d\u0442\u043e \u043d\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u0430 \u0437\u043e\u043e\u043f\u0430\u0440\u043a. \u0418 \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0432\u043e\u0440<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u0435\u043d\u044f \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u0441\u043f\u0440\u043e\u0441\u0438\u043b\u0438, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 GC \u0432 UNDO-MVCC \u0431\u0430\u0437\u0435, \u044f \u0431\u044b \u043e\u0442\u0432\u0435\u0442\u0438\u043b: \u00ab\u0443\u0441\u0435\u0447\u0435\u043d\u0438\u0435 UNDO-\u043b\u043e\u0433\u0430 \u043f\u043e watermark\u00bb. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u044f\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0438\u0432\u0443\u0442 \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435:<\/p>\n<pre><code>\u0441\u043b\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f       \u0447\u0442\u043e \u043a\u043e\u043f\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0440\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445    \u043a\u0442\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500UNDO (.aud)         \u0445\u0432\u043e\u0441\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0439               \u0443\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e watermark + epoch reaperheap (.adb)         \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0430       \u0444\u043e\u043d\u043e\u0432\u044b\u0439 reclaim-\u0432\u043e\u0440\u043a\u0435\u0440                    \u0432\u044b\u0440\u043e\u0441\u0448\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0438\u043d\u0434\u0435\u043a\u0441\u044b             tombstones (\u0437\u0430\u043f\u0438\u0441\u0438 \u0441 xmax)         \u0444\u043e\u043d\u043e\u0432\u044b\u0439 GC + \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0443\u0431\u043e\u0440\u043a\u0430                                                       \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0441\u043a\u0430\u043d\u043e\u043ccolumnar-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b   delete vectors, \u043c\u0435\u043b\u043a\u0438\u0435 L0-\u0431\u043b\u043e\u0431\u044b    compaction-\u0432\u043e\u0440\u043a\u0435\u0440in-memory \u0430\u0440\u0435\u043d\u0430     \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f    \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u0438 \u0441\u0431\u0440\u043e\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b                    (\u043e \u043d\u0451\u043c \u043d\u0438\u0436\u0435)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u0437\u043e\u043e\u043f\u0430\u0440\u043a \u043a\u0430\u043a \u0441\u0438\u043c\u043f\u0442\u043e\u043c \u0431\u043e\u043b\u0435\u0437\u043d\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u0434\u0443\u043c\u0430\u0435\u043c \u0438\u043d\u0430\u0447\u0435, \u0438 \u0432\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p>\u041e\u0442 bloat \u0438 \u043e\u0442 \u00ab\u0432\u0430\u043a\u0443\u0443\u043c\u0430\u00bb \u043a\u0430\u043a \u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043b\u044e\u0431\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412\u0435\u0440\u0441\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u0434\u0435-\u0442\u043e \u0440\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0438 \u0433\u0434\u0435-\u0442\u043e \u0443\u043c\u0438\u0440\u0430\u044e\u0442, \u0438 \u043a\u0442\u043e-\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u043d \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430 \u0443\u043c\u0435\u0440\u0448\u0438\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c, <em>\u0433\u0434\u0435<\/em> \u043e\u043d\u0438 \u0443\u043c\u0438\u0440\u0430\u044e\u0442 (\u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438: \u043d\u0435 \u0432 heap), \u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u00ab\u043d\u0438\u0433\u0434\u0435\u00bb. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u2014 heap, UNDO, \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u043e\u043b\u043e\u043d\u043e\u0447\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u2014 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0444\u0438\u0437\u0438\u043a\u0443 \u0441\u043c\u0435\u0440\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0435\u043d\u0438\u043a\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u00ab\u043a\u0430\u043a \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 GC\u00bb, \u0430 \u00ab\u043a\u0430\u043a\u0438\u043c \u043e\u043d \u043e\u0431\u044f\u0437\u0430\u043d \u0431\u044b\u0442\u044c\u00bb. \u041d\u0430\u0448 \u043e\u0442\u0432\u0435\u0442 \u2014 \u0442\u0440\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438 \u0437\u0430\u0442\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c:<\/p>\n<ol>\n<li>\n<p><strong>\u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u043e\u043d\u0435 \u0438 \u043c\u0430\u043b\u044b\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438.<\/strong> \u041a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c \u2014 \u0441\u0442\u043e\u043b\u044c\u043a\u043e-\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0437\u0430 \u043f\u0440\u043e\u0445\u043e\u0434, \u2014 \u0447\u0442\u043e\u0431\u044b \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0437\u0430 \u0432\u0441\u0451 I\/O \u0441\u0440\u0430\u0437\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 stop-the-world.<\/strong> \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 <code>VACUUM FULL<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0435\u0440\u0443\u0442 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0439 \u043b\u043e\u043a \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043f\u043e\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0436\u0434\u0451\u0442. \u041a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 GC \u2014 \u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430: \u0441\u043a\u0430\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0442\u0430\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u043b\u0438\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u0438\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0430 \u043d\u0435\u0439 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/strong> \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438 \u2014 \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043c\u043e\u0433 \u0436\u0438\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0430\u043c\u0438 \u0431\u0435\u0437 \u0434\u0430\u0443\u043d\u0442\u0430\u0439\u043c\u0430 \u0438 \u0431\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0439 \u00ab\u0433\u0438\u0433\u0438\u0435\u043d\u044b\u00bb \u043e\u0442 DBA. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0443\u0436\u0435\u043d \u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u0438\u043b\u0438 maintenance window \u2014 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u044d\u0442\u043e \u0431\u0430\u0433\u043e\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0430 \u043d\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u0443 \u043f\u0440\u0438\u0437\u043c\u0443 \u043f\u044f\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u2014 \u043d\u0435 \u043f\u044f\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0430 \u043f\u044f\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 \u0444\u0438\u0437\u0438\u043a\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043b\u043e\u044f. \u0427\u0435\u0433\u043e \u0438\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u2014 \u043e\u043d\u0438 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u043e \u0434\u0440\u0443\u0433\u0435: \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u0439 watermark, \u0441\u0432\u043e\u0439 \u0432\u043e\u0440\u043a\u0435\u0440, \u0441\u0432\u043e\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0430\u0447\u043a\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 (<code>undo_file_bytes<\/code>, <code>gc_dead_tuples_reclaimed_total<\/code>, \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0441\u0442\u0430\u0440\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430, lag watermark\u2019\u0430) \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u00ab\u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438\u00bb.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b \u044d\u0442\u043e\u0439 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u2014 GC-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440: \u043e\u0434\u0438\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 \u043e\u0431\u0449\u0438\u043c watermark \u0438 \u043e\u0431\u0449\u0438\u043c \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442 \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u044f\u0445 \u0438 \u0440\u0430\u0437\u0434\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u043f\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0443 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u043c\u0443 I\/O. \u041c\u044b \u0438\u0434\u0451\u043c \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0438 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0442\u043e\u0440\u043e\u043f\u0438\u043c\u0441\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0442\u0430\u0442\u044c \u0441\u043a\u0443\u0447\u043d\u044b\u043c \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438\u043d\u0430\u0447\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0434\u0438\u0440\u0438\u0436\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043c\u0443\u0437\u044b\u043a\u0430\u043d\u0442\u043e\u0432 \u0444\u0430\u043b\u044c\u0448\u0438\u0432\u0438\u0442.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u043a \u0442\u0435\u043c, \u043a\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b: \u043a\u0430\u043a \u0432\u044b \u0440\u0435\u0448\u0430\u043b\u0438 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 I\/O-\u0431\u044e\u0434\u0436\u0435\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u044f\u043c\u0438 \u0432 \u0435\u0434\u0438\u043d\u043e\u043c GC? \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 \u0445\u043e\u0447\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u2014 UNDO \u0445\u043e\u0447\u0435\u0442 \u0443\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0447\u0430\u0449\u0435, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0440\u043e\u0441\u044f\u0442 compaction \u0432 \u043f\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, heap-reclaim \u00ab\u0442\u0435\u0440\u043f\u0438\u0442\u00bb, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442. \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0440\u0443\u0431\u043e, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u043f\u044b\u0442 \u0438\u043b\u0438 \u043c\u043d\u0435\u043d\u0438\u0435 \u2014 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043d\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e.<\/p>\n<hr\/>\n<h3>\u0412\u0430\u0436\u043d\u043e\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435: \u0432\u043d\u0443\u0442\u0440\u0438 \u0436\u0438\u0432\u0443\u0442 \u0434\u0432\u0430 MVCC-\u0441\u043b\u043e\u044f<\/h3>\n<p>\u041e\u0431 \u044d\u0442\u043e\u043c \u043b\u0435\u0433\u043a\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u0442\u044c, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0443\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p>UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 heap \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u0435\u0440\u0432\u043e\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b in-memory \u0441\u043b\u043e\u0439: \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u043b\u0435\u0436\u0430\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0430\u043c\u0438 \u0432 \u0430\u0440\u0435\u043d\u0435, \u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e <code>RowId<\/code> \u0435\u0441\u0442\u044c \u00ab\u0433\u043e\u043b\u043e\u0432\u0430\u00bb \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0430\u043c\u0443\u044e \u0441\u0432\u0435\u0436\u0443\u044e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 <code>u64<\/code>. \u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 CAS: \u00ab\u0437\u0430\u043c\u0435\u043d\u0438 \u0433\u043e\u043b\u043e\u0432\u0443 \u043d\u0430 \u043c\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0432\u0438\u0434\u0435\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435\u00bb:<\/p>\n<pre><code class=\"rust\">pub fn try_install_head(    &amp;self,    row_id: RowId,    expected_prev: VersionPtr,    new_ptr: VersionPtr,) -&gt; Result&lt;VersionPtr, WriteWriteConflict&gt; {    let entry = self.heads.entry(row_id).or_insert_with(|| {        AtomicU64::new(VersionPtr::NULL.0)    });    match entry.compare_exchange(        expected_prev.0, new_ptr.0,        Ordering::AcqRel, Ordering::Acquire,    ) {        Ok(_) =&gt; Ok(new_ptr),        Err(_) =&gt; Err(WriteWriteConflict { row_id }),    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0430\u043b\u043e \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0443\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0435\u0437 \u0448\u0438\u0440\u043e\u043a\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b: \u0434\u0432\u0430 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435, \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0440 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044f\u0432\u043d\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430: \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0432\u0448\u0438\u0439 CAS \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0435 \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u043e\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u0430 <code>WriteWriteConflict<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0440\u0443\u0436\u0443 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a <code>40001 serialization_failure<\/code> \u2014 \u043e\u0442\u043a\u0430\u0442 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0436\u0434\u0451\u0442 \u0447\u0443\u0436\u043e\u0439 row lock, \u043a\u0430\u043a PostgreSQL \u043d\u0430 Read Committed, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u044b.<\/p>\n<p>\u041e\u0434\u043d\u043e \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u0448\u0435: \u0441\u0430\u043c\u0430 \u043a\u0430\u0440\u0442\u0430 \u0433\u043e\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e <code>DashMap&lt;RowId, AtomicU64&gt;<\/code>, \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438 lock-free (\u0448\u0430\u0440\u0434\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438). CAS \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0435 \u0437\u0430 \u00ab\u043d\u0438\u0433\u0434\u0435 \u043d\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a\u00bb, \u0430 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0433\u043e\u043b\u043e\u0432\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u0435\u043b.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0448\u0451\u043b \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 heap \u0441 UNDO, \u0438 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0443\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u043d\u0430 \u043d\u0435\u0433\u043e.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043e\u0431\u0430 \u0441\u043b\u043e\u044f \u0436\u0438\u0432\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. In-memory \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0443\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446, heap \u0441 UNDO \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u0434\u0451\u0442, legacy-\u043f\u0443\u0442\u044c \u0441\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0440\u0435\u043b\u0438\u0437\u043e\u043c, \u043d\u043e \u0441\u043b\u043e\u0442-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0430\u0440\u0435\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 append-only \u2014 \u0441\u043b\u043e\u0442\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043e \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u0441\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0431\u044b\u043b\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u044c heap \u0441 UNDO \u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0439? \u0417\u0430\u0434\u043d\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u2014 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0434\u0430, \u0438 \u043c\u044b \u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u043e in-memory \u0441\u043b\u043e\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0430\u043c \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432, \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c, WAL \u0438 recovery. \u041c\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u0446\u0435\u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0434\u043e\u0440\u043e\u0436\u0435, \u0447\u0435\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435.<\/p>\n<hr\/>\n<h3>UNDO-\u043b\u043e\u0433 \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438: AS OF SNAPSHOT \u0438 AS OF TIMESTAMP<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u0441\u043b\u043e\u044f\u043c\u0438, \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0440\u0435\u043b\u0430 \u043c\u044b\u0441\u043b\u044c: \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0432 UNDO \u2014 \u0435\u0451 \u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0440\u0430\u0434\u0438 rollback \u0438 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445. \u041d\u043e \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u00ab\u043c\u0430\u0448\u0438\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u00bb. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u0430\u0442\u044c \u043a \u043d\u0435\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 SQL-\u0434\u043e\u0441\u0442\u0443\u043f.<\/p>\n<p>\u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <code>SELECT ... AS OF SNAPSHOT &lt;n&gt;<\/code> \u0438 <code>SELECT ... AS OF TIMESTAMP '&lt;ts&gt;'<\/code>.<\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u043f\u0440\u044f\u043c\u0430\u044f: \u0442\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0448\u044c \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u043f\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u043c\u0443 ID \u0438\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u0438 \u0434\u0432\u0438\u0436\u043e\u043a \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043f\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u043c MVCC-\u0447\u0442\u0435\u043d\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 \u0437\u0430\u0434\u0430\u0451\u0442 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u0430 \u0442\u0432\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0427\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 <code>AS OF TIMESTAMP '2026-06-13 14:00:00'<\/code> \u2014 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 heap + UNDO, \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0434\u0432\u0438\u043d\u0443\u0442 \u043d\u0430\u0437\u0430\u0434.<\/p>\n<p>\u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435:<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0439 DELETE.<\/strong> \u0421\u043d\u0451\u0441 \u043d\u0435 \u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d PITR \u0432\u0441\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 \u0438 \u0447\u0430\u0441\u044b \u0434\u0430\u0443\u043d\u0442\u0430\u0439\u043c\u0430. <code>INSERT INTO orders SELECT * FROM orders AS OF TIMESTAMP '...' WHERE id IN (...)<\/code> \u2014 \u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0437\u0431\u043e\u0440 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430.<\/strong> \u00ab\u0427\u0442\u043e \u0432\u0438\u0434\u0435\u043b \u043a\u043b\u0438\u0435\u043d\u0442 \u0432 14:03?\u00bb \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0431\u0430\u0437\u044b \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0431\u0435\u0437 audit-\u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u043f\u0440\u043e\u0441\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442.<\/strong> \u0412\u043c\u0435\u0441\u0442\u043e \u0434\u043e\u043b\u0433\u043e\u0439 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u0440\u0436\u0438\u0442 watermark \u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 GC) \u2014 \u0441\u0435\u0440\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c <code>AS OF SNAPSHOT N<\/code>. \u041e\u043d\u0438 \u0432\u0441\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0430 GC \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0443 \u0434\u0440\u0443\u0433\u0438\u0445: PostgreSQL \u0443\u0431\u0440\u0430\u043b time travel \u0435\u0449\u0451 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 6.2 \u2014 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u044d\u0442\u043e PITR-\u0440\u0435\u0441\u0442\u043e\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430. Oracle Flashback Query \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 enterprise-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 Oracle, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f\u0445. MariaDB \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 system-versioned tables, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b DDL \u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u2014 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0434\u043b\u044f bloat.<\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u0432 UNDO \u043a\u0430\u043a \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 MVCC \u2014 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0435\u0439 SQL-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043a\u0443\u0434\u0430 \u0434\u0435\u0448\u0435\u0432\u043b\u0435, \u0447\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f. Overhead \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439: +8 \u0431\u0430\u0439\u0442 \u0432 V2-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 tuple \u043d\u0430 per-row chain pointer, \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 3% \u043f\u043e write-throughput \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0442\u0435\u043d\u0434\u0435.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u044d\u0442\u0443 \u0444\u0438\u0447\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u0440\u043e\u0432\u043d\u0443: \u0442\u0435, \u043a\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u0430\u043b \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 SQL, \u043e\u0442 \u043d\u0435\u0451 \u0432 \u0432\u043e\u0441\u0442\u043e\u0440\u0433\u0435 \u2014 \u00ab\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438\u00bb \u0438\u043b\u0438 \u00ab\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c \u0432\u0447\u0435\u0440\u0430 \u0432 23:00\u00bb \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438 SQL \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u0432\u043e\u043d\u043a\u0430 DBA. \u0421\u043a\u0435\u043f\u0442\u0438\u043a\u0438 \u043f\u0440\u0430\u0432\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c: retention \u2014 \u044d\u0442\u043e \u043d\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u043a\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0440\u043e\u0441\u0442 UNDO, \u0438 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u00ab\u0441\u0443\u0442\u043a\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438\u00bb \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u0439 OLTP-\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441 \u0442\u044b\u0441\u044f\u0447\u044c\u044e \u0430\u043f\u0434\u0435\u0439\u0442\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u2014 \u044d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441, \u0430 \u043d\u0435 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0438\u0447\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0438 \u043c\u044b \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0434\u0443\u043c\u0430\u043b \u043e retention. \u041d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u0434\u043b\u044f \u0441\u0432\u0435\u0440\u043a\u0438 \u00ab\u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435\u00bb \u043f\u0440\u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f\u0445, \u0434\u043b\u044f \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u2014 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0430\u043c\u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432 production.<\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><strong>Retention \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/strong> \u041a\u043e\u043d\u0444\u0438\u0433 <code>undo_retention_seconds_max<\/code> (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0444\u0438\u0447\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430, opt-in). Retention \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e: \u043c\u0438\u043d\u0443\u0442\u044b\u2013\u0447\u0430\u0441\u044b, \u043d\u0435 \u0434\u043d\u0438 \u0438 \u043d\u0435 \u043d\u0435\u0434\u0435\u043b\u0438. \u0414\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u2014 \u044d\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 backup.<\/p>\n<\/li>\n<li>\n<p><strong>Fail-closed \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043e\u043a\u043d\u0430.<\/strong> \u0417\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0433\u043b\u0443\u0431\u0436\u0435, \u0447\u0435\u043c UNDO \u0443\u0441\u043f\u0435\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 SQLSTATE 72000 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u043e\u0439 \u00abincrease undo_retention_seconds_max (current: N)\u00bb. \u0422\u0438\u0445\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u044f\u0432\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><code><strong>current_snapshot()<\/strong><\/code><strong> \u0438 <\/strong><code><strong>snapshot_at(ts)<\/strong><\/code> \u2014 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043e \u0441\u0435\u0440\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0412\u0437\u044f\u043b \u0441\u043d\u0430\u043f\u0448\u043e\u0442, \u043f\u0440\u043e\u0448\u0451\u043b\u0441\u044f \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c \u2014 \u0432\u0441\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>v0 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 seq scan<\/strong>, \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043b\u044f <code>AS OF<\/code> \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 (\u0441\u043c. \u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e\u00bb \u043d\u0438\u0436\u0435).<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>\u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e<\/h3>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0431\u0435\u0437 \u043f\u0440\u0438\u0443\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><strong>\u0415\u0434\u0438\u043d\u044b\u0439 GC-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440.<\/strong> \u041e\u043f\u0438\u0441\u0430\u043d \u0432\u044b\u0448\u0435; \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0440\u043e\u043a \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043c\u0430\u0436\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>State-based \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0433\u043e GC.<\/strong> \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u0447\u0438\u0441\u0442\u043a\u0430 tombstones \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443; \u043d\u0443\u0436\u0435\u043d \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043f\u043e \u0434\u043e\u043b\u0435 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>WAL-\u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e reclaim heap-\u0441\u043b\u043e\u0442\u043e\u0432.<\/strong> \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0441\u043b\u043e\u0442\u0430 \u043d\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c opcode; \u0435\u0441\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0443\u0437\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0441\u0435\u0447\u0435\u043d\u0438\u044f UNDO. \u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0442\u043e\u0432 in-memory \u0430\u0440\u0435\u043d\u044b.<\/strong> Append-only \u0434\u043e \u0441\u0431\u0440\u043e\u0441\u0430; \u0434\u043b\u044f \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u044d\u0442\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>AS OF \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u043f\u0443\u0442\u044c.<\/strong> <code>AS OF SNAPSHOT \/ TIMESTAMP<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 seq scan \u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u043b\u043d\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439.<\/strong> Reaper \u044d\u043f\u043e\u0445 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430, \u0430 \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435; \u043d\u0443\u0436\u0435\u043d \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f: Heap-MVCC (PostgreSQL) vs UNDO-MVCC<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0451 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">PostgreSQL (heap-MVCC)<\/p>\n<\/th>\n<th>\n<p align=\"left\">UNDO-MVCC (\u043d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0413\u0434\u0435 \u0436\u0438\u0432\u0451\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432 heap, \u0440\u044f\u0434\u043e\u043c \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c append-only UNDO-\u043b\u043e\u0433\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0426\u0435\u043d\u0430 UPDATE \u0434\u043b\u044f \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f tuple \u0432 heap<\/p>\n<\/td>\n<td>\n<p align=\"left\">in-place \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c + ~159 \u0431\u0430\u0439\u0442 \u0432 UNDO<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">UPDATE \u043d\u0435\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0435\u0441\u043b\u0438 HOT \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b (\u043d\u0443\u0436\u043d\u043e \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u0432\u0441\u0435 (\u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435, \u0430 \u043d\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ROLLBACK<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u043e\u0447\u0442\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u2014 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f VACUUM\u2019\u0443<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 UNDO-\u0437\u0430\u043f\u0438\u0441\u0435\u0439)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043a\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e UPDATE<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0447\u0438\u0442\u0430\u0435\u0442 \u0438 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043e\u043a\u0430 VACUUM \u043d\u0435 \u0434\u043e\u0433\u043e\u043d\u0438\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">O(\u0436\u0438\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a) \u2014 \u0432\u0441\u0435\u0433\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 heap<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u043e\u043b\u0433\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 VACUUM \u2192 \u043f\u0443\u0445\u043d\u0435\u0442 heap<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0435\u0440\u0436\u0438\u0442 watermark \u2192 \u0440\u0430\u0441\u0442\u0451\u0442 UNDO, \u0434\u0430\u043b\u044c\u0448\u0435 <code>snapshot too old<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0413\u0434\u0435 \u043a\u043e\u043f\u0438\u0442\u0441\u044f bloat<\/p>\n<\/td>\n<td>\n<p align=\"left\">heap \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 tombstones, \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b, \u0445\u0432\u043e\u0441\u0442 UNDO<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0427\u0435\u043c \u0447\u0438\u0441\u0442\u0438\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">VACUUM \u2014 \u043e\u0434\u0438\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u044f\u0442\u044c \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u2192 \u043a\u0443\u0440\u0441 \u043d\u0430 \u0435\u0434\u0438\u043d\u044b\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0441\u0442\u0440\u043e\u043a, \u0433\u0434\u0435 \u0443 \u043d\u0430\u0441 \u00ab\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u00bb, \u0438 \u0441\u0442\u0440\u043e\u043a, \u0433\u0434\u0435 \u00ab\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u00bb \u0443 PostgreSQL, \u2014 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430, \u044d\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0435\u043d.<\/p>\n<hr\/>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u043e\u0436\u0438\u043b\u0441\u044f \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 UNDO-MVCC: \u044d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u00ab\u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0440\u0430\u0441\u043f\u0443\u0445\u0430\u0435\u0442 \u0442\u0430\u043c \u0436\u0435, \u0433\u0434\u0435 \u043b\u0435\u0436\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0435\u00bb. \u041d\u043e \u043e\u043d\u0430 \u043d\u0435 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u2014 \u043e\u043d\u0430 \u0435\u0451 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442. UNDO-\u043b\u043e\u0433 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0435\u043a\u0430\u0442\u044c, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0443\u0436\u043d\u043e \u0447\u0438\u0441\u0442\u0438\u0442\u044c, \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u00ab\u043d\u0443\u0436\u043d\u043e\u00bb \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u043e \u0441\u0432\u043e\u0438\u043c watermark \u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>VACUUM \u0432 PostgreSQL \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445. \u041d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0446\u0435\u043d\u0438\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0432 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443: \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u043e\u043d\u043d\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 runbook\u2019\u043e\u0432. \u041c\u044b \u0441\u0432\u043e\u0439 \u00ab\u0437\u043e\u043e\u043f\u0430\u0440\u043a\u00bb \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u044e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0426\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0432 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0438\u043c, \u2014 \u043d\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434 \u00ab\u043b\u0443\u0447\u0448\u0435\u00bb, \u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c: heap \u043d\u0435 \u043f\u0443\u0445\u043d\u0435\u0442 \u043e\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, rollback \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u043d\u0435 \u0434\u043e\u0440\u043e\u0436\u0430\u0435\u0442 \u043e\u0442 write-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u2014 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0449\u0451 time travel \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u0431\u044b\u043b\u0430. \u042d\u0442\u043e \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u0432, \u0430 \u043d\u0435 \u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f.<\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u2014 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0434\u044b \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c production-\u043e\u043f\u044b\u0442:<\/p>\n<ul>\n<li>\n<p>\u041a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043b InnoDB \u0441 \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u043e\u0432\u044b\u043c\u0438 \u043e\u0442\u0447\u0451\u0442\u043d\u044b\u043c\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438? \u041a\u0430\u043a \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f undo tablespaces?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u043e\u043b\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432 undo-\u0446\u0435\u043f\u043e\u0447\u043a\u0435 (\u043d\u0430\u0448\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 16 \u0432\u0435\u0440\u0441\u0438\u0439) \u0432\u044b \u0431\u044b \u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c \u0438 \u043e\u0442 \u0447\u0435\u0433\u043e \u0431\u044b \u0435\u0433\u043e \u0441\u0447\u0438\u0442\u0430\u043b\u0438?<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u2014 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0435\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u0433\u0434\u0435-\u0442\u043e \u0441\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043d\u0435 \u0442\u0443\u0434\u0430. \u0421\u043f\u043e\u0440\u044b \u043f\u0440\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u0438 \u043f\u0438\u0448\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u0438\u0449\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0438\u043b\u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0435 OLTP-\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439 write-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u043e HTAP \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0434\u0432\u0438\u0436\u043e\u043a \u0432\u0431\u043b\u0438\u0437\u0438 \u2014 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043d\u0430\u043c. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432: \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u043e\u0442 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1047852\/\">https:\/\/habr.com\/ru\/articles\/1047852\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041c\u044b \u043f\u0438\u0448\u0435\u043c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Rust. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b: Buffer Pool \u0441 Clock-sweep \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0435\u0439 \u0441\u043a\u0430\u043d\u043e\u0432 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u0441 \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438. \u042d\u0442\u043e \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u0440\u0443\u0433\u0430\u044f. \u041e\u043d\u0430 \u043f\u0440\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0436\u0438\u0432\u0451\u043c \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440: MVCC \u043d\u0430 UNDO-\u043b\u043e\u0433\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 heap, \u043a\u0430\u043a \u0443 PostgreSQL. \u041c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u0430\u043b\u043e, \u0433\u0434\u0435 \u043d\u0430\u0448\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0437\u0443\u043d\u0433\u0438 \u0440\u0430\u0437\u043e\u0448\u043b\u0438\u0441\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u0438 \u043a\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u0435\u0449\u0451 \u0432\u043f\u0435\u0440\u0435\u0434\u0438. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u0438 \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e MVCC-\u0441\u043b\u043e\u0451\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u0432\u0430 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u2014 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0439\u0434\u0451\u043c \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443.\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0444\u0440\u0430\u0437\u0430 \u00ab\u043d\u0435\u0442 VACUUM \u2014 \u043d\u0435\u0442 bloat\u00bb \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0440\u0430\u043d\u043d\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u2014 \u043f\u0440\u043e \u0442\u043e, \u0447\u0435\u043c \u0437\u0430 UNDO \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u0438\u0442\u044c.\u0427\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0440\u043e\u043a\u0438; \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 append-only UNDO store (\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0444\u0430\u0439\u043b\u044b .aud); \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0443; rollback \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438\u0434\u0451\u0442 \u043f\u043e \u0435\u0451 UNDO-\u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0441 CLR \u0432 WAL; ARIES-style undo pass \u043d\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438; \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0435 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435; \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f UPDATE, \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438; GC UNDO-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e watermark; \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u044b \u0434\u043b\u044f \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 heap \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 tombstones. \u0427\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u043e: \u0435\u0434\u0438\u043d\u044b\u0439 GC-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440 (\u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432); state-based \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u043e\u0433\u043e GC; \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0442\u043e\u0432 \u0432 in-memory \u0430\u0440\u0435\u043d\u0435 \u0432\u0435\u0440\u0441\u0438\u0439.\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c. \u0412\u0441\u0435 \u0446\u0438\u0444\u0440\u044b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0442\u0435\u043d\u0434\u0435: \u043e\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0436\u0435\u043b\u0435\u0437\u0430, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0440\u0430\u0434\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0430 \u043d\u0435 \u043a\u0430\u043a \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0417\u0434\u0435\u0441\u044c \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u2014 \u0441 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u043c \u0441\u0442\u0435\u043d\u0434\u043e\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u043e\u0439 \u2014 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0433\u043e\u0442\u043e\u0432\u044b.\u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0433\u0434\u0430, \u0432\u0441\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445: UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442 bloat \u0438\u0437 heap \u2014 \u043d\u043e \u043d\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u0435\u0433\u043e, \u0430 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0441\u043b\u043e\u0442\u044b \u0438 \u0441\u0430\u043c UNDO-\u043b\u043e\u0433. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0446\u0435\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u043b\u0447\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443. \u0410 GC \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u043f\u044f\u0442\u044c, \u0438 \u043c\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u0432\u043e\u0434\u0438\u043c \u0438\u0445 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u0443.\u041a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e: heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435\u0412 PostgreSQL \u0441\u0442\u0430\u0440\u0430\u044f \u0438 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0440\u044f\u0434\u043e\u043c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. UPDATE \u2014 \u044d\u0442\u043e INSERT \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043b\u044e\u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u0441\u0442\u0430\u0440\u043e\u0439, \u0430 VACUUM \u043f\u043e\u0442\u043e\u043c \u0445\u043e\u0434\u0438\u0442 \u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0447\u0430\u044f, \u043d\u043e \u0446\u0435\u043d\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u043a\u0442\u043e \u0432\u0438\u0434\u0435\u043b \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0440\u0430\u0441\u043f\u0443\u0445\u0448\u0443\u044e \u0432\u0434\u0432\u043e\u0435 \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\u041c\u044b \u043f\u043e\u0448\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 (\u0435\u0451 \u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 InnoDB \u0438 Oracle): heap \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e, \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 append-only UNDO store.Heap (.adb)      \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 + \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438UNDO (.aud)      append-only \u0438\u0441\u0442\u043e\u0440\u0438\u044f: pre-image \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 UPDATE\/DELETE\u0427\u0442\u0435\u043d\u0438\u0435 snapshot  \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0432 heap \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u043e\u0432\u0430\u044f \u2014 \u0440\u0430\u0437\u043c\u043e\u0442\u0430\u0442\u044c UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0443GC               \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0445\u0432\u043e\u0441\u0442 UNDO \u043f\u043e watermark, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e tuple \u0432 heap \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435: created_commit, deleted_commit \u0438 undo_chain_head_ptr \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0433\u043e\u043b\u043e\u0432\u0443 \u0435\u0433\u043e UNDO-\u0446\u0435\u043f\u043e\u0447\u043a\u0438. \u0421\u0430\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 u64 \u043a\u0430\u043a [segment_id:24][byte_offset:40]: \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e.UNDO-\u0437\u0430\u043f\u0438\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0414\u043b\u044f UPDATE, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0432\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438\u0437 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438, \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0440\u0430\u0441\u0442\u043e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0434\u0435\u043b\u044c\u0442\u044b:pub enum UndoDelta {    FullRow(Vec&lt;Value&gt;),    ColumnDelta(Vec&lt;(u16, Value)&gt;), \/\/ (column_index, old_value)}\u041d\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 ColumnDelta \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043c\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u044b\u0435 16 \u0432\u0435\u0440\u0441\u0438\u0439 \u043c\u044b \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439. \u0412 \u043a\u043e\u0434 \u0434\u0430\u0436\u0435 \u0437\u0430\u0448\u0438\u0442 \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c: \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 2 \u00d7 16 + 4 \u0448\u0430\u0433\u043e\u0432 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0430 \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0421\u0430\u043c\u043e \u0447\u0438\u0441\u043b\u043e 16 \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0451\u043c\u043e\u043c UNDO \u0438 worst-case \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0447\u0442\u0435\u043d\u0438\u044f; \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0434 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\u0426\u0435\u043b\u0438\u043a\u043e\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0442\u0430\u043a\u0430\u044f:heap (.adb) \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 \u0441\u0442\u0440\u043e\u043a\u0430 \u00b7 created_commit \u00b7 undo_chain_head_ptr \u2500\u2500\u2510 \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502\u2500\u2518                                                  \u25bcUNDO (.aud) \u2014 append-only \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043d\u043e\u0432\u0435\u0435 \u2192 \u0441\u0442\u0430\u0440\u0435\u0435\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 ColumnDelta \u2502 \u2500\u25b6 \u2502 ColumnDelta \u2502 \u2500\u25b6 \u2026 \u2500\u25b6 \u2502 FullRow     \u2502\u2502 commit=42   \u2502    \u2502 commit=37   \u2502         \u2502 commit=21   \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                          \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 16 \u0432\u0435\u0440\u0441\u0438\u0439 \u2014                          \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u043c \u2014 \u0432 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 (\u0434\u0435\u0442\u0430\u043b\u0438 \u0432\u0440\u043e\u0434\u0435 \u0434\u0435\u043b\u044c\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0443\u0449\u0435\u043d\u044b):fn read_at(tid: TupleId, snapshot: u64) -&gt; Option&lt;Row&gt; {    let (row, meta) = heap.get(tid);    if visible(&amp;meta, snapshot) {        return Some(row);                    \/\/ fast path: \u0432 UNDO \u043d\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u043c    }    let mut ptr = meta.undo_chain_head_ptr;  \/\/ slow path: \u0440\u0430\u0437\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044e    let mut image = row;    while ptr != UNDO_PTR_NULL {        let rec = undo.get(ptr);        image = apply_delta(image, rec.delta);        if rec.commit_ts &lt;= snapshot {            return Some(image);              \/\/ \u043d\u0430\u0448\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044e, \u0432\u0438\u0434\u0438\u043c\u0443\u044e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443        }        ptr = rec.prev;    }    None  \/\/ \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e}\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435: \u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u043b\u0430\u0442\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442, \u043a\u0442\u043e \u0435\u0451 \u0447\u0438\u0442\u0430\u0435\u0442. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0441\u043e \u0441\u0432\u0435\u0436\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 UNDO \u0432\u043e\u043e\u0431\u0449\u0435. \u0412 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 UPDATE \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 UNDO \u043e\u043a\u043e\u043b\u043e 159 \u0431\u0430\u0439\u0442 \u2014 \u0438 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0446\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043b\u0430\u0442\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c.\u0427\u0442\u043e UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u043c \u0434\u0430\u043b\u0430\u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043d\u0435 \u0442\u0435\u043e\u0440\u0438\u044f, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0438 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0440\u0436\u0438\u043c\u0441\u044f.Rollback \u2014 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430, \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438ROLLBACK \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043c\u0443\u0441\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0431\u0435\u0440\u0451\u0442. \u041e\u043d \u0431\u0435\u0440\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a UNDO-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 (\u043e\u0442 \u043d\u043e\u0432\u0435\u0439\u0448\u0435\u0439 \u043a \u0441\u0442\u0430\u0440\u0435\u0439\u0448\u0435\u0439), \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0438\u0448\u0435\u0442 CLR \u0432 WAL (compensation log record \u2014 \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u00ab\u044d\u0442\u043e\u0442 \u043e\u0442\u043a\u0430\u0442 \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u00bb, \u0447\u0442\u043e\u0431\u044b recovery \u043d\u0435 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u043b \u0434\u0432\u0430\u0436\u0434\u044b) \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0435\u043b\u044c\u0442\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a heap. \u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u0430\u0442\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430 \u0442\u043e\u043c\u0443, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0430 \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.Recovery \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0435\u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u041f\u0440\u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0440\u0451\u0445\u0444\u0430\u0437\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430: analysis, redo, undo. Undo pass \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c \u0438 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435 \u0436\u0435 UNDO-\u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 SIGKILL \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0436\u0435 \u0432 heap, \u0430 \u0435\u0451 UNDO \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0435\u0445\u0430\u043b: \u0442\u0430\u043a\u0438\u0435 \u0444\u0430\u043d\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (created_commit \u0432\u044b\u0448\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438) recovery \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u042d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u043c\u044b \u043f\u043e\u0439\u043c\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043d\u0430 \u0433\u0440\u0443\u0431\u043e\u0435 \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u2014 SIGKILL-\u0442\u0435\u0441\u0442\u044b \u0443 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e suite \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0439 shutdown \u0442\u0430\u043a\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442.Snapshot too old \u2014 \u0447\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0430 \u043d\u0435 \u0442\u0438\u0445\u043e\u0435 \u0432\u0440\u0430\u043d\u044c\u0451UNDO \u043d\u0435\u043b\u044c\u0437\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0447\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u043e\u043d \u0441\u0430\u043c \u0441\u0442\u0430\u043d\u0435\u0442 bloat\u2019\u043e\u043c. \u0415\u0433\u043e \u0445\u0432\u043e\u0441\u0442 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044f \u043f\u043e watermark \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0443 \u0441\u0440\u0435\u0434\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439. \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442 \u0432\u0435\u0440\u0441\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e GC \u0443\u0436\u0435 \u043e\u0442\u0440\u0435\u0437\u0430\u043b?\u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 fail-closed: \u043e\u0448\u0438\u0431\u043a\u0430 snapshot too old (SQLSTATE 72000) \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0438\u0445\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0438 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u00ab\u043d\u0435 \u0437\u043d\u0430\u044e\u00bb \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u043b\u0447\u0430 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0442\u044c. \u0414\u0430, \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u0447\u0442\u043e \u0438 Oracle \u0441 ORA-01555 \u2014 \u0438 \u0443 \u043d\u0430\u0441 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u043e\u0434\u0443 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u043e\u0434\u0443\u0448\u0438\u044f. \u041d\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c GC \u0440\u0430\u0434\u0438 \u0434\u043e\u043b\u0433\u0438\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u2014 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0435\u0449\u0451 \u043c\u0435\u043d\u044c\u0448\u0435: \u043e\u0434\u043d\u0430 \u0437\u0430\u0431\u044b\u0442\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438 \u043c\u044f\u0433\u043a\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430: \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0441\u0442\u0430\u0440\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 warn\/hard \u043b\u0438\u043c\u0438\u0442\u044b \u043d\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044f\u0434\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435, \u2014 \u043d\u0430\u043c \u043f\u0440\u0430\u0432\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 TID: UPDATE, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b\u042d\u0442\u043e \u043a\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 UNDO-\u043c\u043e\u0434\u0435\u043b\u044c \u043b\u0451\u0433 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0430 \u043d\u0430 heap-\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e.\u041f\u0440\u0438 in-place UPDATE \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0451\u043c \u0441\u043b\u043e\u0442\u0435 \u2014 \u0435\u0451 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (TID) \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0410 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 TID. \u041e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435: \u0435\u0441\u043b\u0438 UPDATE \u043d\u0435 \u0442\u0440\u043e\u043d\u0443\u043b \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u043d\u0438 \u043e\u0434\u0438\u043d \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u2014 \u0432\u0441\u0435 \u0441\u0442\u0430\u0440\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.\u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u043e\u043c\u043d\u044f\u0442 \u043f\u043e\u0441\u0442 Uber 2016 \u0433\u043e\u0434\u0430 \u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u0441 PostgreSQL: \u043e\u0434\u043d\u0430 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0439 \u0431\u044b\u043b\u0430 \u0440\u043e\u0432\u043d\u043e \u043a \u044d\u0442\u043e\u043c\u0443. \u0412 PG \u043a\u0430\u0436\u0434\u044b\u0439 UPDATE \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 tuple \u0441 \u043d\u043e\u0432\u044b\u043c ctid, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f HOT \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435, \u0447\u044c\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c. \u0410 HOT \u0442\u0430\u043c \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u0444\u0438\u0437\u0438\u043a\u043e\u0439: \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043b\u0435\u0437\u0442\u044c \u043d\u0430 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 heap. \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u2014 \u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e.\u0423 \u043d\u0430\u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430 \u0447\u0438\u0441\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435: \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u041c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0432\u0441\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0439 \u0432 heap \u2014 \u0441\u0442\u0430\u0440\u0430\u044f \u0443\u0435\u0445\u0430\u043b\u0430 \u0432 UNDO. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c pre-image \u0438 post-image \u043f\u043e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 IS DISTINCT FROM (\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439 NaN -&gt; NaN: \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 IEEE 754 NaN \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435, \u043d\u043e \u0434\u043b\u044f \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c\u00bb \u2014 \u043c\u044b \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043b\u0438 fail-closed \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c), \u0434\u043b\u044f expression-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u2014 fail-closed fallback \u0441 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u0430 \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0442 (\u0432\u044b\u0440\u043e\u0441\u043b\u0430) \u2014 guard \u043f\u043e TID \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0451 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0424\u043b\u0430\u0433 \u00ab\u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b\u00bb \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 UNDO-\u0437\u0430\u043f\u0438\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0430\u0442 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.\u0426\u0435\u043d\u0430 \u0441\u043a\u0430\u043d\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439\u0420\u0430\u0437 heap \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0438\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0430\u043d \u0447\u0438\u0442\u0430\u0435\u0442 O(\u0436\u0438\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a) \u2014 \u0432\u0441\u0435\u0433\u0434\u0430. \u0412 heap-\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e UPDATE count(*) \u0447\u0438\u0442\u0430\u0435\u0442&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-483749","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=483749"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483749\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=483749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=483749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=483749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}