{"kind": "plan", "major": "18", "item": {"slug": "lockrows", "name": "LockRows", "name_zh": "LockRows", "category": "\u63a7\u5236", "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "aliases": ["LockRows", "T_LockRows"], "content_hash": "4d8e9292e85eb6898bef8e81963c3cba9c7daa8aa0774b92dba3b4446713b2c2", "versions": {"10": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "29da3effdb873ca41f8bb90e8d37167f21e6dd7ec395ad1080b768274db18725", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=10", "label": "EXPLAIN"}, {"url": "/docs/10/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/10/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=10", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 10.23 source archive", "label": "10.23", "major": "10", "channel": "historical", "revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9", "source_url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "line": 1089, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1089", "sha256": "a785298532047cfeda969e78c3597a343dc1c56d61ba85830b0f16a02a14b5a1", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "line": 358, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:358", "sha256": "cea76648bb38ae55f18f989768bee1a4ee025691ceea0f86bccb29dcdc166acc", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "29da3effdb873ca41f8bb90e8d37167f21e6dd7ec395ad1080b768274db18725", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, {"url": "https://ftp.postgresql.org/pub/source/v10.23/postgresql-10.23.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "d562c321108844798cd234303fffb618f13d4ee3f3a5ac79bfd963b077e47c22", "archive_sha256": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/10/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "10", "build_id": 63, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "04aacb3e491b4aeabbfc54a60ddedcc5fafcc469c0823a375c35a83ec42575c6", "fragment_sha256": "82af09517c7be979ac518f6bede1cb5e44f328ebf207cc6b25aa2313dff5f7a6", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:62997ea80516ad012fbf6359de33f3b016b54c47e2df76e75606116b4baaf8e5", "translated_from_revision": null}, "body_sha256": "43dc2417d032b8a0ecb22a08ac857e0dc77218091589d09ce082266339389f7e", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08heap_lock_tuple \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 HeapTupleInvisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "10", "text_hash": "7fc4af59de11450665ca876758e40a81fc081d0956b2e6f4aefa91fe989cf8d6", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/10/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "10", "build_id": 63, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "04aacb3e491b4aeabbfc54a60ddedcc5fafcc469c0823a375c35a83ec42575c6", "fragment_sha256": "82af09517c7be979ac518f6bede1cb5e44f328ebf207cc6b25aa2313dff5f7a6", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:62997ea80516ad012fbf6359de33f3b016b54c47e2df76e75606116b4baaf8e5", "translated_from_revision": null}, "body_sha256": "43dc2417d032b8a0ecb22a08ac857e0dc77218091589d09ce082266339389f7e", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08heap_lock_tuple \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 HeapTupleInvisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p> <span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"xref\" href=\"/zh/docs/10/sql-explain.html\"><span class=\"refentrytitle\">EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/10/performance-tips.html#USING-EXPLAIN\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "10", "link_map": {"/zh/docs/10/sql-explain.html": "/docs/10/sql-explain.html", "/zh/docs/10/performance-tips.html#USING-EXPLAIN": "/docs/10/performance-tips.html#USING-EXPLAIN"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p> <span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/10/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/10/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "866a638bd52d280267d242c24b66eefa5d3d44837bb555a24b61185fdba8e4db", "content_hash": "7fc4af59de11450665ca876758e40a81fc081d0956b2e6f4aefa91fe989cf8d6", "source_database": "center", "source_revision": "94a4b2528372458e5662c18d406629266667c437198160a18cdfd2c4a4d6eee9"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08heap_lock_tuple \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 HeapTupleInvisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/10/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/10/facts/0/label": "Core node tag", "/versions/10/facts/1/label": "Structured EXPLAIN Node Type", "/versions/10/facts/2/label": "Inputs", "/versions/10/facts/2/value": "One child plan with row identity information", "/versions/10/facts/3/label": "Output", "/versions/10/facts/3/value": "Locked qualifying tuples", "/versions/10/facts/4/label": "Executor initializer", "/versions/10/facts/5/label": "Memory mechanism", "/versions/10/tables/0/title": "EXPLAIN labels in this source build", "/versions/10/related/1/label": "Using EXPLAIN", "/versions/10/related/2/label": "Parallel plans", "/versions/10/related/3/label": "Row locks", "/versions/10/sections/0/title": "EXPLAIN names and attributes", "/versions/10/sections/1/title": "Memory and temporary storage", "/versions/10/sections/2/title": "Parallel execution and instrumentation", "/versions/10/sections/3/title": "Executor implementation notes", "/versions/10/sections/4/title": "EXPLAIN identity in core source", "/versions/10/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/10/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/10/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/10/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/10/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/10/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/10/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/10/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/10/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/10/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/10/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/10/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (heap_lock_tuple will not complain, but few callers expect HeapTupleInvisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/10/tables/0/columns/0/label": "Text-format label", "/versions/10/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "176df06650b8b816535c2509c5c23b8aa06960ae13f7ffcb00ba3ef82bd91a9e", "canonical_center_text_hash": "7fc4af59de11450665ca876758e40a81fc081d0956b2e6f4aefa91fe989cf8d6"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p> <span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/10/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/10/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "11": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "d20646942aff6c0c9746db16eb09c5bd19cf4dacaaa1d3fe096389a88106a532", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=11", "label": "EXPLAIN"}, {"url": "/docs/11/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/11/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=11", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 11.22 source archive", "label": "11.22", "major": "11", "channel": "historical", "revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0", "source_url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "line": 1214, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1214", "sha256": "9df8400c1a4377179572ceb916d6020fca4e2760f74bf416d77ed97476523bbd", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "line": 358, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:358", "sha256": "95ef4d4a5df4c29f14af9763fae2c530449bdacdf3853d9ff297adf1fed6153b", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "d20646942aff6c0c9746db16eb09c5bd19cf4dacaaa1d3fe096389a88106a532", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, {"url": "https://ftp.postgresql.org/pub/source/v11.22/postgresql-11.22.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "5e0511194183800e8d6eb293fd4b40639c7d3118e2d199c8e7865ba4fa4cf67f", "archive_sha256": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/11/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "11", "build_id": 64, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "617a30102327f61276ba77fb034f4bf1bbb677d91d4eb5507dc14d740e6394c9", "fragment_sha256": "a7b71780192bea8bfc169883aae459f6d32a71fe928f60388479827c9c8b54bc", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:ef5c7bc074acae9795db16e6b7482aea3b222bd4bcce0f76831332b97a21e8a1", "translated_from_revision": null}, "body_sha256": "66c805bfde77febd4d44316e865a9c395e0e6a2e17731f4d26a3f69a19565b6d", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08heap_lock_tuple \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 HeapTupleInvisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "11", "text_hash": "6f477d20148c5453ec7600b096d1dd6f4dbc6444feade34037014d3ff2a929b6", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/11/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "11", "build_id": 64, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "617a30102327f61276ba77fb034f4bf1bbb677d91d4eb5507dc14d740e6394c9", "fragment_sha256": "a7b71780192bea8bfc169883aae459f6d32a71fe928f60388479827c9c8b54bc", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:ef5c7bc074acae9795db16e6b7482aea3b222bd4bcce0f76831332b97a21e8a1", "translated_from_revision": null}, "body_sha256": "66c805bfde77febd4d44316e865a9c395e0e6a2e17731f4d26a3f69a19565b6d", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08heap_lock_tuple \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 HeapTupleInvisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"xref\" href=\"/zh/docs/11/sql-explain.html\"><span class=\"refentrytitle\">EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/11/performance-tips.html#USING-EXPLAIN\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "11", "link_map": {"/zh/docs/11/sql-explain.html": "/docs/11/sql-explain.html", "/zh/docs/11/performance-tips.html#USING-EXPLAIN": "/docs/11/performance-tips.html#USING-EXPLAIN"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/11/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/11/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "b70ccac1f8f4f2629a91356ab83189d6f4cee238333430bf7fe105d6377d8903", "content_hash": "6f477d20148c5453ec7600b096d1dd6f4dbc6444feade34037014d3ff2a929b6", "source_database": "center", "source_revision": "2cb7c97d7a0d7278851bbc9c61f467b69c094c72b81740b751108e7892ebe1f0"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08heap_lock_tuple \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 HeapTupleInvisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/11/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/11/facts/0/label": "Core node tag", "/versions/11/facts/1/label": "Structured EXPLAIN Node Type", "/versions/11/facts/2/label": "Inputs", "/versions/11/facts/2/value": "One child plan with row identity information", "/versions/11/facts/3/label": "Output", "/versions/11/facts/3/value": "Locked qualifying tuples", "/versions/11/facts/4/label": "Executor initializer", "/versions/11/facts/5/label": "Memory mechanism", "/versions/11/tables/0/title": "EXPLAIN labels in this source build", "/versions/11/related/1/label": "Using EXPLAIN", "/versions/11/related/2/label": "Parallel plans", "/versions/11/related/3/label": "Row locks", "/versions/11/sections/0/title": "EXPLAIN names and attributes", "/versions/11/sections/1/title": "Memory and temporary storage", "/versions/11/sections/2/title": "Parallel execution and instrumentation", "/versions/11/sections/3/title": "Executor implementation notes", "/versions/11/sections/4/title": "EXPLAIN identity in core source", "/versions/11/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/11/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/11/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/11/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/11/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/11/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/11/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/11/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/11/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/11/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/11/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/11/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (heap_lock_tuple will not complain, but few callers expect HeapTupleInvisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/11/tables/0/columns/0/label": "Text-format label", "/versions/11/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "36d8d5384c6579c10238d4ea1c3051d50c04fa91c529a89bb0c9366299ca94cb", "canonical_center_text_hash": "6f477d20148c5453ec7600b096d1dd6f4dbc6444feade34037014d3ff2a929b6"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/11/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/11/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "12": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "1566339c3f5bf680514954244e9bc8267efeceebfc7d31740245701f0b08d7bd", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=12", "label": "EXPLAIN"}, {"url": "/docs/12/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/12/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=12", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 12.22 source archive", "label": "12.22", "major": "12", "channel": "historical", "revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b", "source_url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "line": 1285, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1285", "sha256": "d02ea84fdaa201de5d9360645a9f24bfbd2c31f7d45a639e09560ac0e6b6471d", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "line": 358, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:358", "sha256": "311b17379fe54e3f342fe5ad41c43afbdfa1b844978db2bb2eb22b82520d3256", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "1566339c3f5bf680514954244e9bc8267efeceebfc7d31740245701f0b08d7bd", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, {"url": "https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "b0c4a0aeb48660ce06e5e700d5529ca9066fd16682bd15783d6e71b5420b07b0", "archive_sha256": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/12/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "12", "build_id": 65, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "773efea8d76bcea57eb449ceb506a51025a4125ceaa9b765a1039e558f5cfe98", "fragment_sha256": "5563b70cc4f15175ea74a689b7145d309617eefbe2ea27e4fce422e01369eff6", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:86d2ff781f93e1de17122ebc514d5e64fcb63fed15941f496d7e146c6dcc7a49", "translated_from_revision": null}, "body_sha256": "b5f1a79ef54bb3dbee5bfeaad540019aa31ec2a8f28614c4d2d70ae3d2d70c30", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "12", "text_hash": "1080d92138587fe6a3e522b9cd57bda804fbfc6761935df2732d2bc23e1ae672", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/12/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "12", "build_id": 65, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "773efea8d76bcea57eb449ceb506a51025a4125ceaa9b765a1039e558f5cfe98", "fragment_sha256": "5563b70cc4f15175ea74a689b7145d309617eefbe2ea27e4fce422e01369eff6", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:86d2ff781f93e1de17122ebc514d5e64fcb63fed15941f496d7e146c6dcc7a49", "translated_from_revision": null}, "body_sha256": "b5f1a79ef54bb3dbee5bfeaad540019aa31ec2a8f28614c4d2d70ae3d2d70c30", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"xref\" href=\"/zh/docs/12/sql-explain.html\"><span class=\"refentrytitle\">EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/12/performance-tips.html#USING-EXPLAIN\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "12", "link_map": {"/zh/docs/12/sql-explain.html": "/docs/12/sql-explain.html", "/zh/docs/12/performance-tips.html#USING-EXPLAIN": "/docs/12/performance-tips.html#USING-EXPLAIN"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/12/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/12/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "cb7131a12d36fddc025139df122ea43727d6b96484ac8eaeb478b525692144b3", "content_hash": "1080d92138587fe6a3e522b9cd57bda804fbfc6761935df2732d2bc23e1ae672", "source_database": "center", "source_revision": "8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/12/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/12/facts/0/label": "Core node tag", "/versions/12/facts/1/label": "Structured EXPLAIN Node Type", "/versions/12/facts/2/label": "Inputs", "/versions/12/facts/2/value": "One child plan with row identity information", "/versions/12/facts/3/label": "Output", "/versions/12/facts/3/value": "Locked qualifying tuples", "/versions/12/facts/4/label": "Executor initializer", "/versions/12/facts/5/label": "Memory mechanism", "/versions/12/tables/0/title": "EXPLAIN labels in this source build", "/versions/12/related/1/label": "Using EXPLAIN", "/versions/12/related/2/label": "Parallel plans", "/versions/12/related/3/label": "Row locks", "/versions/12/sections/0/title": "EXPLAIN names and attributes", "/versions/12/sections/1/title": "Memory and temporary storage", "/versions/12/sections/2/title": "Parallel execution and instrumentation", "/versions/12/sections/3/title": "Executor implementation notes", "/versions/12/sections/4/title": "EXPLAIN identity in core source", "/versions/12/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/12/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/12/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/12/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/12/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/12/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/12/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/12/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/12/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/12/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/12/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/12/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/12/tables/0/columns/0/label": "Text-format label", "/versions/12/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "26021d994f83e4021fa6d22a8cdcad098aa24c3f0027149501b5932c970777dc", "canonical_center_text_hash": "1080d92138587fe6a3e522b9cd57bda804fbfc6761935df2732d2bc23e1ae672"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/12/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/12/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "13": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "1253534d0ede7747431b9e0236acaaa27111bb5f96ea9fa7805d1cb8cb0ecc1e", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=13", "label": "EXPLAIN"}, {"url": "/docs/13/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/13/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=13", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 13.23 source archive", "label": "13.23", "major": "13", "channel": "historical", "revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6", "source_url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "line": 1346, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1346", "sha256": "541713e0e7f1c9cc352c2b6028964d440c19d2678a4463000094c24a88c1e730", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "line": 363, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:363", "sha256": "d085ee99acfa00587e6ade3a1d9f8108a0566beedbbee3f54a50c9fc0cc2e875", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "1253534d0ede7747431b9e0236acaaa27111bb5f96ea9fa7805d1cb8cb0ecc1e", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, {"url": "https://ftp.postgresql.org/pub/source/v13.23/postgresql-13.23.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "dcb296833777b02008c4b6bae8e8f7c6423b7ffba21f36702597c9d596d039ab", "archive_sha256": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/13/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "13", "build_id": 66, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "d7400476f3cf658423dd2d2f64b6b6b0e53d8fdc8692b9e93a05587095d469e1", "fragment_sha256": "9385d1b095126378694216a1f9cb95d249ccc7fab5ffa3f65cf08679fe2b14c3", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:a13a825c39f0268ef1cfe9137e283e38d0da73b2d7894f0733c7b26372a4f6a4", "translated_from_revision": null}, "body_sha256": "98003fea08c9c8c591a2999969fc1c90b00f9452c8c095d4135d180928d535bb", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "13", "text_hash": "f168d90c2dee51b3690c313b3318acf5f8c1c2ebab5a99e720d2665f00b6b9f4", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/13/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "13", "build_id": 66, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "d7400476f3cf658423dd2d2f64b6b6b0e53d8fdc8692b9e93a05587095d469e1", "fragment_sha256": "9385d1b095126378694216a1f9cb95d249ccc7fab5ffa3f65cf08679fe2b14c3", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "snapshot:sha256:a13a825c39f0268ef1cfe9137e283e38d0da73b2d7894f0733c7b26372a4f6a4", "translated_from_revision": null}, "body_sha256": "98003fea08c9c8c591a2999969fc1c90b00f9452c8c095d4135d180928d535bb", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"xref\" href=\"/zh/docs/13/sql-explain.html\"><span class=\"refentrytitle\">EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/13/performance-tips.html#USING-EXPLAIN\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "13", "link_map": {"/zh/docs/13/sql-explain.html": "/docs/13/sql-explain.html", "/zh/docs/13/performance-tips.html#USING-EXPLAIN": "/docs/13/performance-tips.html#USING-EXPLAIN"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/13/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/13/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "b76b4b8eb1f8e8d7ffc7f77c152f89a811286c6189e4b172657e0de985a90ed5", "content_hash": "f168d90c2dee51b3690c313b3318acf5f8c1c2ebab5a99e720d2665f00b6b9f4", "source_database": "center", "source_revision": "6ec3c82726af92b7dec873fa1cdf881eca92a4219787dfad05acb6b10e041fd6"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/13/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/13/facts/0/label": "Core node tag", "/versions/13/facts/1/label": "Structured EXPLAIN Node Type", "/versions/13/facts/2/label": "Inputs", "/versions/13/facts/2/value": "One child plan with row identity information", "/versions/13/facts/3/label": "Output", "/versions/13/facts/3/value": "Locked qualifying tuples", "/versions/13/facts/4/label": "Executor initializer", "/versions/13/facts/5/label": "Memory mechanism", "/versions/13/tables/0/title": "EXPLAIN labels in this source build", "/versions/13/related/1/label": "Using EXPLAIN", "/versions/13/related/2/label": "Parallel plans", "/versions/13/related/3/label": "Row locks", "/versions/13/sections/0/title": "EXPLAIN names and attributes", "/versions/13/sections/1/title": "Memory and temporary storage", "/versions/13/sections/2/title": "Parallel execution and instrumentation", "/versions/13/sections/3/title": "Executor implementation notes", "/versions/13/sections/4/title": "EXPLAIN identity in core source", "/versions/13/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/13/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/13/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/13/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/13/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/13/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/13/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/13/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/13/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/13/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/13/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/13/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/13/tables/0/columns/0/label": "Text-format label", "/versions/13/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "089d6589aa1ae63571b3821ce9e8e60f6ef4dd4cb1a7653519d21aa656acd034", "canonical_center_text_hash": "f168d90c2dee51b3690c313b3318acf5f8c1c2ebab5a99e720d2665f00b6b9f4"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/13/sql-explain.html\" rel=\"nofollow\"><span>EXPLAIN</span></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/13/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "14": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "53fd181e1740ae6b7b5918a9b9568d64bf2f2d1466a18e16b1a7f23506d22469", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=14", "label": "EXPLAIN"}, {"url": "/docs/14/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/14/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=14", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 14.24 source archive", "label": "14.24", "major": "14", "channel": "stable", "revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897", "source_url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "line": 1388, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1388", "sha256": "e091be4e2a083b8dea39ccd09beedede22c1716ef974da66c214a44f48be8c41", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "72da1c5ad457f1d92a39ab73531701794df858419e3b89d6e6cb7079634e68fa", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "53fd181e1740ae6b7b5918a9b9568d64bf2f2d1466a18e16b1a7f23506d22469", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, {"url": "https://ftp.postgresql.org/pub/source/v14.24/postgresql-14.24.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "302f51a16b570dba7ec4e7bc045f7df5800d21630280354d1a24025f3baec75d", "archive_sha256": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/14/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "14", "build_id": 99, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "62cadce9a200c7891b3bbf04fc22c8dc17b4525aec0d020a074310592666f6d4", "fragment_sha256": "44f0e04fca33c2837461b83f68b9337a6abf37b979c0097630f9ab322fb3c567", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:87e6aa4fd6e1ec85c5f4a6de4f5647cfd9e5de734ca2c266d32b6d6192c662ef", "translated_from_revision": null}, "body_sha256": "7e36a1baec4c1c07261726c8b398e824e4f446ff45e89ff64a49dd3efe075168", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "14", "text_hash": "0cb80ce60055b81b69cd706e5589a34d5f448d3eec6d74060ffe630aeb605694", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/14/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "14", "build_id": 99, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "62cadce9a200c7891b3bbf04fc22c8dc17b4525aec0d020a074310592666f6d4", "fragment_sha256": "44f0e04fca33c2837461b83f68b9337a6abf37b979c0097630f9ab322fb3c567", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:87e6aa4fd6e1ec85c5f4a6de4f5647cfd9e5de734ca2c266d32b6d6192c662ef", "translated_from_revision": null}, "body_sha256": "7e36a1baec4c1c07261726c8b398e824e4f446ff45e89ff64a49dd3efe075168", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/14/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/14/performance-tips.html#USING-EXPLAIN\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "14", "link_map": {"/zh/docs/14/sql-explain.html": "/docs/14/sql-explain.html", "/zh/docs/14/performance-tips.html#USING-EXPLAIN": "/docs/14/performance-tips.html#USING-EXPLAIN"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/14/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/14/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "96b525aaf8023569be94ef71bebba7548297082e159ab492d842d118971ef6d8", "content_hash": "0cb80ce60055b81b69cd706e5589a34d5f448d3eec6d74060ffe630aeb605694", "source_database": "center", "source_revision": "a7fa7ed3d558172355f51406097a7bd4f6b473be80f311ef7cda96bf383d8897"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/14/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/14/facts/0/label": "Core node tag", "/versions/14/facts/1/label": "Structured EXPLAIN Node Type", "/versions/14/facts/2/label": "Inputs", "/versions/14/facts/2/value": "One child plan with row identity information", "/versions/14/facts/3/label": "Output", "/versions/14/facts/3/value": "Locked qualifying tuples", "/versions/14/facts/4/label": "Executor initializer", "/versions/14/facts/5/label": "Memory mechanism", "/versions/14/tables/0/title": "EXPLAIN labels in this source build", "/versions/14/related/1/label": "Using EXPLAIN", "/versions/14/related/2/label": "Parallel plans", "/versions/14/related/3/label": "Row locks", "/versions/14/sections/0/title": "EXPLAIN names and attributes", "/versions/14/sections/1/title": "Memory and temporary storage", "/versions/14/sections/2/title": "Parallel execution and instrumentation", "/versions/14/sections/3/title": "Executor implementation notes", "/versions/14/sections/4/title": "EXPLAIN identity in core source", "/versions/14/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/14/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/14/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/14/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/14/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/14/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/14/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/14/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/14/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/14/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/14/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/14/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/14/tables/0/columns/0/label": "Text-format label", "/versions/14/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "7c53a98d395a74bd9137b112cf596c7f922a88143b43497fbf876bf653e1e7df", "canonical_center_text_hash": "0cb80ce60055b81b69cd706e5589a34d5f448d3eec6d74060ffe630aeb605694"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/14/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/14/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "15": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "56657aff5fa0ba6e695e592f24dec5823625987d835db25e2fc0916b9f6dcf1b", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=15", "label": "EXPLAIN"}, {"url": "/docs/15/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/15/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=15", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 15.19 source archive", "label": "15.19", "major": "15", "channel": "stable", "revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89", "source_url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "line": 1391, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1391", "sha256": "bb3b442d0f1b098aa8707335250102f027a596cd94117308bd16d1d36b258f5c", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "19836c50a272741a4eac653541e655437c2e00710a541e5348d6a277d0669d7c", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "56657aff5fa0ba6e695e592f24dec5823625987d835db25e2fc0916b9f6dcf1b", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, {"url": "https://ftp.postgresql.org/pub/source/v15.19/postgresql-15.19.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "fb4a4c8165495299131173680bc02a950d88e1ff610231fd97997bc0c9afc1d7", "archive_sha256": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/15/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "15", "build_id": 101, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "d842974e11d60f39bee19269d456c1cf6a01bc6c2c3ac27d8d1e7966ef5f46b9", "fragment_sha256": "16561716621b0c2403eaa78c0cd62211754eaec8fd5716f685f693e1deb3a07b", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:6bce1a2df9170cb1146a1411c5547190856638221a6539e618ee1016c9f493ad", "translated_from_revision": null}, "body_sha256": "5399f1ddc8fe602310d5a53340f4494cf52e7aacfbc320d9ff888cc0a92dced2", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "15", "text_hash": "2b8fbf1246d6e4bdda6bb77a1b8e0972ae3d2d893c3379ce2fcb0b2c1092cd2e", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/15/performance-tips.html#USING-EXPLAIN", "anchor": "USING-EXPLAIN", "locale": "zh-Hans", "version": "15", "build_id": 101, "page_key": "performance-tips.html", "extraction": "concept-introduction", "source_hash": "d842974e11d60f39bee19269d456c1cf6a01bc6c2c3ac27d8d1e7966ef5f46b9", "fragment_sha256": "16561716621b0c2403eaa78c0cd62211754eaec8fd5716f685f693e1deb3a07b", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:6bce1a2df9170cb1146a1411c5547190856638221a6539e618ee1016c9f493ad", "translated_from_revision": null}, "body_sha256": "5399f1ddc8fe602310d5a53340f4494cf52e7aacfbc320d9ff888cc0a92dced2", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/15/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/15/performance-tips.html#USING-EXPLAIN\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "15", "link_map": {"/zh/docs/15/sql-explain.html": "/docs/15/sql-explain.html", "/zh/docs/15/performance-tips.html#USING-EXPLAIN": "/docs/15/performance-tips.html#USING-EXPLAIN"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/15/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/15/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "1eb4d6150a9af9d4ff2379a88ef480b7e74ddfc72fb59aab83b48d1da447490c", "content_hash": "2b8fbf1246d6e4bdda6bb77a1b8e0972ae3d2d893c3379ce2fcb0b2c1092cd2e", "source_database": "center", "source_revision": "e1a64a87a46b825b88c082e4518161a47aab53c45694964f8ba1df28f7859f89"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/15/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/15/facts/0/label": "Core node tag", "/versions/15/facts/1/label": "Structured EXPLAIN Node Type", "/versions/15/facts/2/label": "Inputs", "/versions/15/facts/2/value": "One child plan with row identity information", "/versions/15/facts/3/label": "Output", "/versions/15/facts/3/value": "Locked qualifying tuples", "/versions/15/facts/4/label": "Executor initializer", "/versions/15/facts/5/label": "Memory mechanism", "/versions/15/tables/0/title": "EXPLAIN labels in this source build", "/versions/15/related/1/label": "Using EXPLAIN", "/versions/15/related/2/label": "Parallel plans", "/versions/15/related/3/label": "Row locks", "/versions/15/sections/0/title": "EXPLAIN names and attributes", "/versions/15/sections/1/title": "Memory and temporary storage", "/versions/15/sections/2/title": "Parallel execution and instrumentation", "/versions/15/sections/3/title": "Executor implementation notes", "/versions/15/sections/4/title": "EXPLAIN identity in core source", "/versions/15/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/15/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/15/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/15/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/15/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/15/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/15/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/15/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/15/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/15/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/15/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/15/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/15/tables/0/columns/0/label": "Text-format label", "/versions/15/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "ac25c883a80d0bd224b7788759922807acd9418b96dbc0765419d2a6d34d1dad", "canonical_center_text_hash": "2b8fbf1246d6e4bdda6bb77a1b8e0972ae3d2d893c3379ce2fcb0b2c1092cd2e"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/15/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/15/performance-tips.html#USING-EXPLAIN\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "16": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "f3ed842a1f5d3260513f494712cf3c10394cd09bd200ff5a8b32c4160fa455b8", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=16", "label": "EXPLAIN"}, {"url": "/docs/16/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/16/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=16", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 16.15 source archive", "label": "16.15", "major": "16", "channel": "stable", "revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed", "source_url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "line": 1424, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1424", "sha256": "8e017f0116dbea471339b40c37a667cc9f95039e7e0329c783e5e8ce194de7e1", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "e48c08e555f8cb4e4bb43df516c4b8906ce9bc374b2a745d98a1fc8c22cc5099", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "f3ed842a1f5d3260513f494712cf3c10394cd09bd200ff5a8b32c4160fa455b8", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, {"url": "https://ftp.postgresql.org/pub/source/v16.15/postgresql-16.15.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "97db47353db76326b874589a5ad0a04501cc74cd72e237e7bd956e7472c41f1f", "archive_sha256": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/16/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "16", "build_id": 103, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "394de9d6895c7909a1a823408b8c980c5415db8ca3c212e23d6e7e9b6e01c6cc", "fragment_sha256": "8a4cc7ad0a2c8ca5894434db8a1fca93a69bfb200ac510843c26d7bd42a12d58", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:80579a071736780f9c4022bb5148e1fb1256f1a33591306af67816e9e9bf3a9b", "translated_from_revision": null}, "body_sha256": "21d1582dc90005b74f562e710daeeacb10d34ec9998faa3727349d342e4d1cd6", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "16", "text_hash": "3090a8ca20995a4bc6385be170cca1b0c34946b4bd8643bbc58f78e42a11ffd1", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/16/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "16", "build_id": 103, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "394de9d6895c7909a1a823408b8c980c5415db8ca3c212e23d6e7e9b6e01c6cc", "fragment_sha256": "8a4cc7ad0a2c8ca5894434db8a1fca93a69bfb200ac510843c26d7bd42a12d58", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:80579a071736780f9c4022bb5148e1fb1256f1a33591306af67816e9e9bf3a9b", "translated_from_revision": null}, "body_sha256": "21d1582dc90005b74f562e710daeeacb10d34ec9998faa3727349d342e4d1cd6", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/16/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/16/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "16", "link_map": {"/zh/docs/16/sql-explain.html": "/docs/16/sql-explain.html", "/zh/docs/16/using-explain.html": "/docs/16/using-explain.html"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/16/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/16/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "7e821d34a02a1375044c4a51ab0e4c6ed6a26c64f2fee4b0ca726799da7c75a6", "content_hash": "3090a8ca20995a4bc6385be170cca1b0c34946b4bd8643bbc58f78e42a11ffd1", "source_database": "center", "source_revision": "c1575341fa7bd40f5274ea465b34390f4dc64cdd0770af327005caaeb9f6b7ed"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/16/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/16/facts/0/label": "Core node tag", "/versions/16/facts/1/label": "Structured EXPLAIN Node Type", "/versions/16/facts/2/label": "Inputs", "/versions/16/facts/2/value": "One child plan with row identity information", "/versions/16/facts/3/label": "Output", "/versions/16/facts/3/value": "Locked qualifying tuples", "/versions/16/facts/4/label": "Executor initializer", "/versions/16/facts/5/label": "Memory mechanism", "/versions/16/tables/0/title": "EXPLAIN labels in this source build", "/versions/16/related/1/label": "Using EXPLAIN", "/versions/16/related/2/label": "Parallel plans", "/versions/16/related/3/label": "Row locks", "/versions/16/sections/0/title": "EXPLAIN names and attributes", "/versions/16/sections/1/title": "Memory and temporary storage", "/versions/16/sections/2/title": "Parallel execution and instrumentation", "/versions/16/sections/3/title": "Executor implementation notes", "/versions/16/sections/4/title": "EXPLAIN identity in core source", "/versions/16/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/16/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/16/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/16/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/16/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/16/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/16/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/16/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/16/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/16/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/16/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/16/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/16/tables/0/columns/0/label": "Text-format label", "/versions/16/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6f8f51ae3b714b28617ae773700270251ecd2cf99779df62443b8b9bcb84173d", "canonical_center_text_hash": "3090a8ca20995a4bc6385be170cca1b0c34946b4bd8643bbc58f78e42a11ffd1"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/16/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f 9.3 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/16/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "17": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "3c0c6270be7b270fc449f27711e6373838576c12f358078a68f8e828972c4984", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=17", "label": "EXPLAIN"}, {"url": "/docs/17/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/17/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=17", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 17.11 source archive", "label": "17.11", "major": "17", "channel": "stable", "revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979", "source_url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "line": 1613, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1613", "sha256": "741251b1a3b6d269a52a673d42eb63b02e13a5872db7b359b137086ab21b63c8", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "a77576e158b94cb01fa8c5174ba133004eabdd727660323f8afc66c8d2e757b8", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "3c0c6270be7b270fc449f27711e6373838576c12f358078a68f8e828972c4984", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, {"url": "https://ftp.postgresql.org/pub/source/v17.11/postgresql-17.11.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "d390dd69e2d3f5085beb42b33e46ff0676a2959b916a12b82118a7e545f8e562", "archive_sha256": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/17/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "17", "build_id": 105, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "b1252952c6d796f5e38c223b74ff667f2d19d677dcf85fe5269b782b830e5013", "fragment_sha256": "8f5243c368dfae57e826af49b7461d37d7f4d97207bd5f540aebe6b10a61f883", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:7340767258d21c21b36f373f1fff6bab2be18e0daca13a865129db6105c09efd", "translated_from_revision": null}, "body_sha256": "ac9e7d0fdbfef18872c2809da7e3f5c6379f3f2dca033d55a7582201618e05ba", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "17", "text_hash": "d414f278b551252a6ba40c1e29d3d1eb65f2ae95646a697823613a3a40cd3411", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/17/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "17", "build_id": 105, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "b1252952c6d796f5e38c223b74ff667f2d19d677dcf85fe5269b782b830e5013", "fragment_sha256": "8f5243c368dfae57e826af49b7461d37d7f4d97207bd5f540aebe6b10a61f883", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:7340767258d21c21b36f373f1fff6bab2be18e0daca13a865129db6105c09efd", "translated_from_revision": null}, "body_sha256": "ac9e7d0fdbfef18872c2809da7e3f5c6379f3f2dca033d55a7582201618e05ba", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/17/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v17 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/17/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "17", "link_map": {"/zh/docs/17/sql-explain.html": "/docs/17/sql-explain.html", "/zh/docs/17/using-explain.html": "/docs/17/using-explain.html"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/17/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v17 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/17/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "4b326d85e0a4362f656da2e511052df9aec7ca9d701ae5fc5152af183c553134", "content_hash": "d414f278b551252a6ba40c1e29d3d1eb65f2ae95646a697823613a3a40cd3411", "source_database": "center", "source_revision": "dd27f2b3c59e73ed14aa3324901242bf69a032a6347805f274e6260322d42979"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/17/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/17/facts/0/label": "Core node tag", "/versions/17/facts/1/label": "Structured EXPLAIN Node Type", "/versions/17/facts/2/label": "Inputs", "/versions/17/facts/2/value": "One child plan with row identity information", "/versions/17/facts/3/label": "Output", "/versions/17/facts/3/value": "Locked qualifying tuples", "/versions/17/facts/4/label": "Executor initializer", "/versions/17/facts/5/label": "Memory mechanism", "/versions/17/tables/0/title": "EXPLAIN labels in this source build", "/versions/17/related/1/label": "Using EXPLAIN", "/versions/17/related/2/label": "Parallel plans", "/versions/17/related/3/label": "Row locks", "/versions/17/sections/0/title": "EXPLAIN names and attributes", "/versions/17/sections/1/title": "Memory and temporary storage", "/versions/17/sections/2/title": "Parallel execution and instrumentation", "/versions/17/sections/3/title": "Executor implementation notes", "/versions/17/sections/4/title": "EXPLAIN identity in core source", "/versions/17/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/17/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/17/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/17/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/17/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/17/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/17/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/17/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/17/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/17/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/17/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/17/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/17/tables/0/columns/0/label": "Text-format label", "/versions/17/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "cd71ce0619c0e6416d342b37141907149b8dd8e61fd0471e74433c24b46fc77b", "canonical_center_text_hash": "d414f278b551252a6ba40c1e29d3d1eb65f2ae95646a697823613a3a40cd3411"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/17/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v17 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/17/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "18": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "a6a30b944beee0590bdabee0ac2571bc1beb231a492df06c19017217daed357f", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=18", "label": "EXPLAIN"}, {"url": "/docs/18/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/18/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=18", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 18.6 source archive", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 1598, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1598", "sha256": "34c86d6070224a0e981efef51f79101d6d505e5874f1684ace183034bab14bb4", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "f8a06a3f539077249b20664b2812433db6d7bd12b2c0ca633525db43d06f112a", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "a6a30b944beee0590bdabee0ac2571bc1beb231a492df06c19017217daed357f", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "52422b327a8049fbbb20d8b96008a0fc0a6fafa60f7eff3c695d5b2e83830120", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/18/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "d2f749744b3ac5aa2eb0154f295e8163903cd20fcc130c74c6172cdf2ae3a9df", "fragment_sha256": "15fbdf84b8f499253ade4f4a5841de138619a9933b93cc241d431dbe922fa40c", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "54f19106a81bb8b3be6974b3b9266eb980192ec235666779f397f01bb272d38e", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "18", "text_hash": "99e0bb47e0ed22285e1d60ed1efb30b4c5173e4aeac4a5ca32560b6e6b4b0c1e", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/18/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "d2f749744b3ac5aa2eb0154f295e8163903cd20fcc130c74c6172cdf2ae3a9df", "fragment_sha256": "15fbdf84b8f499253ade4f4a5841de138619a9933b93cc241d431dbe922fa40c", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "54f19106a81bb8b3be6974b3b9266eb980192ec235666779f397f01bb272d38e", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/18/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/18/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "18", "link_map": {"/zh/docs/18/sql-explain.html": "/docs/18/sql-explain.html", "/zh/docs/18/using-explain.html": "/docs/18/using-explain.html"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/18/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/18/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "735852094a4cdf2f5d293526fd5a0319d2b71b3ce0a3a4ddbf33ecd7e3271a49", "content_hash": "99e0bb47e0ed22285e1d60ed1efb30b4c5173e4aeac4a5ca32560b6e6b4b0c1e", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/18/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/18/facts/0/label": "Core node tag", "/versions/18/facts/1/label": "Structured EXPLAIN Node Type", "/versions/18/facts/2/label": "Inputs", "/versions/18/facts/2/value": "One child plan with row identity information", "/versions/18/facts/3/label": "Output", "/versions/18/facts/3/value": "Locked qualifying tuples", "/versions/18/facts/4/label": "Executor initializer", "/versions/18/facts/5/label": "Memory mechanism", "/versions/18/tables/0/title": "EXPLAIN labels in this source build", "/versions/18/related/1/label": "Using EXPLAIN", "/versions/18/related/2/label": "Parallel plans", "/versions/18/related/3/label": "Row locks", "/versions/18/sections/0/title": "EXPLAIN names and attributes", "/versions/18/sections/1/title": "Memory and temporary storage", "/versions/18/sections/2/title": "Parallel execution and instrumentation", "/versions/18/sections/3/title": "Executor implementation notes", "/versions/18/sections/4/title": "EXPLAIN identity in core source", "/versions/18/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/18/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/18/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/18/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/18/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/18/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/18/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/18/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/18/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/18/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/18/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/18/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/18/tables/0/columns/0/label": "Text-format label", "/versions/18/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "f477da270ec667e63e81b326577e07848ce9762f8a5c64778ea27a53eadf496b", "canonical_center_text_hash": "99e0bb47e0ed22285e1d60ed1efb30b4c5173e4aeac4a5ca32560b6e6b4b0c1e"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/18/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/18/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "center_zh_rendered": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/docs/18/sql-explain.html\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/docs/18/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "19": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v19beta4/postgresql-19beta4.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "06b3c78a370e2460e14fdc8fee2e7acfc551fa8cbad5dfd0cd3606dd38b3c5e3", "archive_sha256": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=19", "label": "EXPLAIN"}, {"url": "/docs/19/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/19/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=19", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 19rc1 source archive", "label": "19rc1", "major": "19", "channel": "preview", "revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "source_url": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "line": 1610, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1610", "sha256": "8b115b1c194a4b54ae630209a741e293b1df49a9052f10b2de9ca092a48998e3", "archive_sha256": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, {"url": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "5e39b2037bed672da55104229ecc32da5abde44c26bcad01479edcfa044d09ed", "archive_sha256": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, {"url": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "06b3c78a370e2460e14fdc8fee2e7acfc551fa8cbad5dfd0cd3606dd38b3c5e3", "archive_sha256": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, {"url": "https://ftp.postgresql.org/pub/source/v19rc1/postgresql-19rc1.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "8d7bcf0e3b0d990a7bf35af47099d6d77207594b3136ff17104ed80bfaa47022", "archive_sha256": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/19/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "19", "build_id": 109, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "9bbb1ef5924e4788a3dc2642828383c67ab8651fb6b0e45924c454f095b0ff47", "fragment_sha256": "1ceb32499da15c4bcec0644765b693adbc1991296745e00460ce28d06d701ef3", "source_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:65fda1f1b62a89992b84014c9157e61b67dbe8190e93945826efec668fad038c", "translated_from_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "body_sha256": "7f50cac1646fce1eb1da304673b5abbc9069908745ffec08b89469a425659b74", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "19", "text_hash": "9f190f99b9087d7def79040618aff6c111d820adbf3302de84fc6f724eb07b11", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/19/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "19", "build_id": 109, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "9bbb1ef5924e4788a3dc2642828383c67ab8651fb6b0e45924c454f095b0ff47", "fragment_sha256": "1ceb32499da15c4bcec0644765b693adbc1991296745e00460ce28d06d701ef3", "source_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:65fda1f1b62a89992b84014c9157e61b67dbe8190e93945826efec668fad038c", "translated_from_revision": "sha256:af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "body_sha256": "7f50cac1646fce1eb1da304673b5abbc9069908745ffec08b89469a425659b74", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/19/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/19/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "19", "link_map": {"/zh/docs/19/sql-explain.html": "/docs/19/sql-explain.html", "/zh/docs/19/using-explain.html": "/docs/19/using-explain.html"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/19/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/19/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "b0605f77dd959fe05eb32cf63ea0866595bd8fb3bf337734bdc1e30897821e47", "content_hash": "9f190f99b9087d7def79040618aff6c111d820adbf3302de84fc6f724eb07b11", "source_database": "center", "source_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/19/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/19/facts/0/label": "Core node tag", "/versions/19/facts/1/label": "Structured EXPLAIN Node Type", "/versions/19/facts/2/label": "Inputs", "/versions/19/facts/2/value": "One child plan with row identity information", "/versions/19/facts/3/label": "Output", "/versions/19/facts/3/value": "Locked qualifying tuples", "/versions/19/facts/4/label": "Executor initializer", "/versions/19/facts/5/label": "Memory mechanism", "/versions/19/tables/0/title": "EXPLAIN labels in this source build", "/versions/19/related/1/label": "Using EXPLAIN", "/versions/19/related/2/label": "Parallel plans", "/versions/19/related/3/label": "Row locks", "/versions/19/sections/0/title": "EXPLAIN names and attributes", "/versions/19/sections/1/title": "Memory and temporary storage", "/versions/19/sections/2/title": "Parallel execution and instrumentation", "/versions/19/sections/3/title": "Executor implementation notes", "/versions/19/sections/4/title": "EXPLAIN identity in core source", "/versions/19/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/19/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/19/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/19/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/19/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/19/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/19/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/19/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/19/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/19/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/19/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/19/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/19/tables/0/columns/0/label": "Text-format label", "/versions/19/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "091df59a83ec5b893eebbd42ed9f5b4931a533f7918688efd291ada99ae90574", "canonical_center_text_hash": "9f190f99b9087d7def79040618aff6c111d820adbf3302de84fc6f724eb07b11"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/19/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/19/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "source_revalidation": {"kind": "static-same-version-source-and-manual-replay", "audit": "wiki-audit-20261023", "runtime_rerun": false, "compared_fields": "entity membership and source-derived facts; presentation markup normalized", "source_revision": "af105fc8e960fc836a09fc2cd7f582b49fd17675d9d36631abe3a565bfd7d701", "previous_source_revision": "83157ee9c599d03b2f7a3d73ef3a56ec24e0e79cc2b3501a64d1364f56398c86"}}, "20": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "06b3c78a370e2460e14fdc8fee2e7acfc551fa8cbad5dfd0cd3606dd38b3c5e3", "archive_sha256": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=20", "label": "EXPLAIN"}, {"url": "/docs/devel/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/devel/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=20", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 20devel source archive", "label": "20devel", "major": "20", "channel": "devel", "revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "source_url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "line": 1610, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1610", "sha256": "f82f238e2e6e249e10daf2e257728494ec10de1695fcf05feaadfd7f6bf78600", "archive_sha256": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "5e39b2037bed672da55104229ecc32da5abde44c26bcad01479edcfa044d09ed", "archive_sha256": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "06b3c78a370e2460e14fdc8fee2e7acfc551fa8cbad5dfd0cd3606dd38b3c5e3", "archive_sha256": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, {"url": "https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "aa3c27b465209c0ecd1f5e0186d39110a75ed7aafb9a196d483fccb5fc641c6b", "archive_sha256": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/devel/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "20", "build_id": 111, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "436517563e51b6d851ef143e70d01f5f68fe0a01e00a0d507e7bd79d7570aa25", "fragment_sha256": "f2d2c226e0479b8d931accead1f2cf7c1b8646afa24d8025ea5d5bcab837f779", "source_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:98c980963b401d40bd50df72b909e7523e3148b8fdb48edd897de2efb67e5235", "translated_from_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "body_sha256": "2c4da14d14e80007fc3bbb3891218ca80be845e7508bfc3d1f6b06c822ac14cb", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "20", "text_hash": "f15952dfe298bed8b437cce337a01f49663c6d2e1abce18cc2c327f6720cf39d", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/devel/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "20", "build_id": 111, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "436517563e51b6d851ef143e70d01f5f68fe0a01e00a0d507e7bd79d7570aa25", "fragment_sha256": "f2d2c226e0479b8d931accead1f2cf7c1b8646afa24d8025ea5d5bcab837f779", "source_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:98c980963b401d40bd50df72b909e7523e3148b8fdb48edd897de2efb67e5235", "translated_from_revision": "sha256:49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "body_sha256": "2c4da14d14e80007fc3bbb3891218ca80be845e7508bfc3d1f6b06c822ac14cb", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/devel/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/devel/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "20", "link_map": {"/zh/docs/devel/sql-explain.html": "/docs/devel/sql-explain.html", "/zh/docs/devel/using-explain.html": "/docs/devel/using-explain.html"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/devel/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/devel/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "b73b6f17e9b4949f98c5ea8072d4fd03895997c67098326a225e6e6813eed70b", "content_hash": "f15952dfe298bed8b437cce337a01f49663c6d2e1abce18cc2c327f6720cf39d", "source_database": "center", "source_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/summary": "Locks rows selected by its child for row-locking clauses.", "/category": "Control", "/versions/20/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/20/facts/0/label": "Core node tag", "/versions/20/facts/1/label": "Structured EXPLAIN Node Type", "/versions/20/facts/2/label": "Inputs", "/versions/20/facts/2/value": "One child plan with row identity information", "/versions/20/facts/3/label": "Output", "/versions/20/facts/3/value": "Locked qualifying tuples", "/versions/20/facts/4/label": "Executor initializer", "/versions/20/facts/5/label": "Memory mechanism", "/versions/20/tables/0/title": "EXPLAIN labels in this source build", "/versions/20/related/1/label": "Using EXPLAIN", "/versions/20/related/2/label": "Parallel plans", "/versions/20/related/3/label": "Row locks", "/versions/20/sections/0/title": "EXPLAIN names and attributes", "/versions/20/sections/1/title": "Memory and temporary storage", "/versions/20/sections/2/title": "Parallel execution and instrumentation", "/versions/20/sections/3/title": "Executor implementation notes", "/versions/20/sections/4/title": "EXPLAIN identity in core source", "/versions/20/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/20/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/20/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/20/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/20/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/20/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/20/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/20/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/20/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/20/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/20/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/20/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/20/tables/0/columns/0/label": "Text-format label", "/versions/20/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "6de0dddc54d396728c10fa0acb29ee2286646988f6b8da49348aaa47601fac79", "canonical_center_text_hash": "f15952dfe298bed8b437cce337a01f49663c6d2e1abce18cc2c327f6720cf39d"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/devel/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/devel/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "source_revalidation": {"kind": "static-same-version-source-and-manual-replay", "audit": "wiki-audit-20261023", "runtime_rerun": false, "compared_fields": "entity membership and source-derived facts; presentation markup normalized", "source_revision": "49c73aa4c9cacef8ca979276a28ac416c08e9e54c9baee4ae5fd116a35fa13ac", "previous_source_revision": "4d3346909b201ac1648232cf290462a7070c119326f56196f1f0253ed80fae41"}}}}, "snapshot": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "memory": {"evidence": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "a6a30b944beee0590bdabee0ac2571bc1beb231a492df06c19017217daed357f", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "mechanism": "unclassified", "description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "source_notes": []}, "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "related": [{"url": "/wiki/sql/explain/?v=18", "label": "EXPLAIN"}, {"url": "/docs/18/using-explain.html", "label": "\u4f7f\u7528 EXPLAIN"}, {"url": "/docs/18/parallel-plans.html", "label": "\u5e76\u884c\u8ba1\u5212"}, {"url": "/wiki/lock/?v=18", "label": "\u884c\u9501"}], "release": {"ref": "PostgreSQL 18.6 source archive", "label": "18.6", "major": "18", "channel": "stable", "revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f", "source_url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "source_snapshot_utc": ""}, "sources": [{"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 1598, "path": "src/backend/commands/explain.c", "label": "src/backend/commands/explain.c:1598", "sha256": "34c86d6070224a0e981efef51f79101d6d505e5874f1684ace183034bab14bb4", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "line": 375, "path": "src/backend/executor/execProcnode.c", "label": "src/backend/executor/execProcnode.c:375", "sha256": "f8a06a3f539077249b20664b2812433db6d7bd12b2c0ca633525db43d06f112a", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/backend/executor/nodeLockRows.c", "label": "src/backend/executor/nodeLockRows.c", "sha256": "a6a30b944beee0590bdabee0ac2571bc1beb231a492df06c19017217daed357f", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, {"url": "https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2", "path": "src/include/nodes/plannodes.h", "label": "src/include/nodes/plannodes.h", "sha256": "52422b327a8049fbbb20d8b96008a0fc0a6fafa60f7eff3c695d5b2e83830120", "archive_sha256": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/18/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "d2f749744b3ac5aa2eb0154f295e8163903cd20fcc130c74c6172cdf2ae3a9df", "fragment_sha256": "15fbdf84b8f499253ade4f4a5841de138619a9933b93cc241d431dbe922fa40c", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "54f19106a81bb8b3be6974b3b9266eb980192ec235666779f397f01bb272d38e", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "facts_zh": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "node_tag": "T_LockRows", "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "center_zh": {"title": "LockRows", "locale": "zh-Hans", "source": {"key": "lockrows", "locale": "zh-Hans", "version": "18", "text_hash": "99e0bb47e0ed22285e1d60ed1efb30b4c5173e4aeac4a5ca32560b6e6b4b0c1e", "collection": "plan", "dataset_hash": "7c31b524dfe136022d39a6ae8dcfac6b3bbd5f8fdaf422536599981252aff0c9", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "payload": {"facts": [{"label": "\u6838\u5fc3\u8282\u70b9\u6807\u7b7e", "value": "T_LockRows"}, {"label": "\u7ed3\u6784\u5316 EXPLAIN \u8282\u70b9\u7c7b\u578b", "value": "LockRows"}, {"label": "\u8f93\u5165", "value": "\u4e00\u4e2a\u5e26\u884c\u8eab\u4efd\u4fe1\u606f\u7684\u5b50\u8ba1\u5212"}, {"label": "\u8f93\u51fa", "value": "\u5df2\u52a0\u9501\u4e14\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7ec4"}, {"label": "\u6267\u884c\u5668\u521d\u59cb\u5316\u51fd\u6570", "value": "ExecInitLockRows"}, {"label": "\u5185\u5b58\u673a\u5236", "value": "unclassified"}], "tables": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "zh_from": {"kind": "same-version-chinese-manual-with-authored-translation-of-reviewed-guidance", "manual": {"url": "/zh/docs/18/using-explain.html", "anchor": "", "locale": "zh-Hans", "version": "18", "build_id": 107, "page_key": "using-explain.html", "extraction": "concept-introduction", "source_hash": "d2f749744b3ac5aa2eb0154f295e8163903cd20fcc130c74c6172cdf2ae3a9df", "fragment_sha256": "15fbdf84b8f499253ade4f4a5841de138619a9933b93cc241d431dbe922fa40c", "source_revision": "unknown:rendered-translation-baseline", "translation_revision": "git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b", "translated_from_revision": null}, "body_sha256": "54f19106a81bb8b3be6974b3b9266eb980192ec235666779f397f01bb272d38e", "runtime_rerun": false, "authored_translation": "authored-translation-of-reviewed-guidance", "source_facts_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "sections": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span class=\"productname\">PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em class=\"firstterm\">\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em class=\"firstterm\">\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a class=\"link\" href=\"/zh/docs/18/sql-explain.html\"><code class=\"command\">EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code class=\"command\">VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code class=\"command\">ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code class=\"command\">EXPLAIN</code> \u9ed8\u8ba4\u7684<span class=\"quote\">\u201c<span class=\"quote\">text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code class=\"command\">EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/18/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "summary": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "version": "18", "link_map": {"/zh/docs/18/sql-explain.html": "/docs/18/sql-explain.html", "/zh/docs/18/using-explain.html": "/docs/18/using-explain.html"}, "body_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/18/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/18/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "body_sha256": "735852094a4cdf2f5d293526fd5a0319d2b71b3ce0a3a4ddbf33ecd7e3271a49", "content_hash": "99e0bb47e0ed22285e1d60ed1efb30b4c5173e4aeac4a5ca32560b6e6b4b0c1e", "source_database": "center", "source_revision": "555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"}, "tables_zh": [{"key": "explain-labels", "rows": [{"label": "LockRows", "identity": "LockRows"}], "title": "\u672c\u6784\u5efa\u4e2d\u7684 EXPLAIN \u6807\u7b7e", "columns": [{"key": "label", "label": "\u6587\u672c\u683c\u5f0f\u6807\u7b7e"}, {"key": "identity", "label": "\u7ed3\u6784\u5316\u8282\u70b9\u6807\u8bc6"}]}], "strategies": [], "description": ["\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002"], "sections_zh": [{"title": "EXPLAIN \u540d\u79f0\u4e0e\u5c5e\u6027", "paragraphs": ["\u7ed3\u6784\u5316\u683c\u5f0f\u4f7f\u7528\u4e0a\u8ff0 Node Type\u3002\u6587\u672c\u683c\u5f0f\u540d\u79f0\u8fd8\u53ef\u80fd\u5305\u542b\u64cd\u4f5c\u3001\u7b56\u7565\u3001\u8fde\u63a5\u7c7b\u578b\u3001\u626b\u63cf\u65b9\u5411\u6216\u805a\u5408\u9636\u6bb5\u5c5e\u6027\u3002", "\u6b64\u6e90\u7801\u8bb0\u5f55\u7684\u6587\u672c\u540d\u79f0\uff1aLockRows.", "\u5e76\u884c\u611f\u77e5\u4e0e\u5e76\u884c\u5b89\u5168\u662f\u4e0d\u540c\u7684\u8ba1\u5212\u5c5e\u6027\u3002\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u5185\u8fd0\u884c\u7684\u8282\u70b9\u4e0d\u4e00\u5b9a\u662f\u5e76\u884c\u611f\u77e5\u8282\u70b9\u3002"]}, {"title": "\u5185\u5b58\u4e0e\u4e34\u65f6\u5b58\u50a8", "paragraphs": ["\u672c\u6b21\u62bd\u53d6\u4e0d\u4e3a\u6b64\u8282\u70b9\u8bbe\u5b9a\u7edf\u4e00\u7684\u5185\u5b58\u4e0a\u9650\u6216\u843d\u76d8\u7b56\u7565\u3002\u8bf7\u67e5\u770b\u540c\u4e00\u6784\u5efa\u7684\u5b9e\u73b0\u3001\u76f8\u5173\u8868\u8fbe\u5f0f\u6216\u63d0\u4f9b\u65b9\u3002"]}, {"title": "\u5e76\u884c\u6267\u884c\u4e0e\u8fd0\u884c\u4fe1\u606f\u91c7\u96c6", "paragraphs": ["\u4ee5\u4e0b\u6e90\u7801\u56de\u8c03\u53ef\u4ee5\u534f\u8c03\u6267\u884c\u6216\u6536\u96c6\u5de5\u4f5c\u8fdb\u7a0b\u7684\u6d4b\u91cf\u6570\u636e\u3002\u56de\u8c03\u5b58\u5728\u4e0d\u4ee3\u8868\u8be5\u8282\u70b9\u666e\u904d\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\u6216\u5171\u4eab\u72b6\u6001\u3002", "\u6b64\u6784\u5efa\u7684\u56de\u8c03\uff1anone extracted from this node implementation."]}, {"title": "\u6267\u884c\u5668\u5b9e\u73b0\u8bf4\u660e", "paragraphs": ["nodeLockRows.c\uff1a\u5904\u7406 FOR UPDATE/FOR SHARE \u884c\u9501\u7684\u4f8b\u7a0b\u3002", "\u9664\u975e\u53d6\u5f97\u66f4\u65b0\u540e\u7684\u5143\u7ec4\u7248\u672c\uff0c\u5426\u5219\u65e0\u9700\u6267\u884c EvalPlanQual\u3002", "\u5c1d\u8bd5\u9501\u5b9a\u6e90\u5143\u7ec4\u3002\uff08\u6ce8\u610f\uff0clr_arowMarks \u4e2d\u4ec5\u5305\u542b\u9700\u8981\u52a0\u9501\u7684\u884c\u6807\u8bb0\u3002\uff09", "\u5982\u679c FDW \u8868\u793a\u5143\u7ec4\u5728\u52a0\u9501\u4e4b\u524d\u5df2\u88ab\u66f4\u65b0\uff0c\u5219\u9700\u8981\u6267\u884c EPQ \u68c0\u67e5\uff0c\u786e\u8ba4\u6761\u4ef6\u4ecd\u7136\u6ee1\u8db3\u3002", "\u76ee\u6807\u5143\u7ec4\u5df2\u88ab\u5f53\u524d\u547d\u4ee4\uff0c\u6216\u540c\u4e00\u4e8b\u52a1\u4e2d\u7684\u540e\u7eed\u547d\u4ee4\u66f4\u65b0\u6216\u5220\u9664\u3002\u524d\u4e00\u79cd\u60c5\u51b5\u5fc5\u987b\u5ffd\u7565\u8be5\u5143\u7ec4\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u66f4\u65b0\u7684\u201c\u4e07\u5723\u8282\u95ee\u9898\u201d\u3002\u540e\u4e00\u79cd\u60c5\u51b5\u6216\u8bb8\u53ef\u4ee5\u83b7\u53d6\u66f4\u65b0\u540e\u7684\u5143\u7ec4\uff0c\u4f46\u8fd9\u9700\u8981\u4fee\u6539 heap_update \u548c heap_delete\uff0c\u4f7f\u5b83\u4eec\u4e0d\u518d\u5bf9\u66f4\u65b0\u201c\u4e0d\u53ef\u89c1\u201d\u5143\u7ec4\u62a5\u9519\uff0c\u98ce\u9669\u5f88\u5927\uff08table_tuple_lock \u4e0d\u4f1a\u62a5\u9519\uff0c\u4f46\u5f88\u5c11\u6709\u8c03\u7528\u8005\u9884\u671f\u6536\u5230 TM_Invisible\uff0c\u8fd9\u91cc\u4e5f\u4e0d\u4f8b\u5916\uff09\u3002\u56e0\u6b64\u76ee\u524d\u5c06\u8be5\u5143\u7ec4\u89c6\u4e3a\u5df2\u5220\u9664\uff0c\u4e0d\u4e88\u5904\u7406\u3002"]}, {"code": "case T_LockRows:\n\t\t\tpname = sname = \"LockRows\";\n\t\t\tbreak;", "title": "\u6838\u5fc3\u6e90\u7801\u4e2d\u7684 EXPLAIN \u6807\u8bc6"}], "localization": {"status": "complete", "sources": [], "language": "zh", "original_text": {"/versions/18/description/0": "Locks rows selected by its child for row-locking clauses.", "/versions/18/facts/0/label": "Core node tag", "/versions/18/facts/1/label": "Structured EXPLAIN Node Type", "/versions/18/facts/2/label": "Inputs", "/versions/18/facts/2/value": "One child plan with row identity information", "/versions/18/facts/3/label": "Output", "/versions/18/facts/3/value": "Locked qualifying tuples", "/versions/18/facts/4/label": "Executor initializer", "/versions/18/facts/5/label": "Memory mechanism", "/versions/18/tables/0/title": "EXPLAIN labels in this source build", "/versions/18/related/1/label": "Using EXPLAIN", "/versions/18/related/2/label": "Parallel plans", "/versions/18/related/3/label": "Row locks", "/versions/18/sections/0/title": "EXPLAIN names and attributes", "/versions/18/sections/1/title": "Memory and temporary storage", "/versions/18/sections/2/title": "Parallel execution and instrumentation", "/versions/18/sections/3/title": "Executor implementation notes", "/versions/18/sections/4/title": "EXPLAIN identity in core source", "/versions/18/memory/description": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/18/sections/0/paragraphs/0": "Structured formats use the Node Type above. Text-format spellings can also include operation, strategy, join type, scan direction or aggregation-stage attributes.", "/versions/18/sections/0/paragraphs/1": "Text names recorded by this source: LockRows.", "/versions/18/sections/0/paragraphs/2": "Parallel-aware and parallel-safe are different plan properties. A node running inside a parallel worker is not necessarily a parallel-aware node.", "/versions/18/sections/1/paragraphs/0": "This extraction does not assign a universal memory limit or spill policy to this node. Inspect the same-build implementation and its expressions or provider.", "/versions/18/sections/2/paragraphs/0": "The source callbacks below can coordinate execution or collect worker instrumentation. Their presence is not a blanket claim that this node supports a shared parallel scan or shared state.", "/versions/18/sections/2/paragraphs/1": "Callbacks in this build: none extracted from this node implementation.", "/versions/18/sections/3/paragraphs/0": "nodeLockRows.c Routines to handle FOR UPDATE/FOR SHARE row locking", "/versions/18/sections/3/paragraphs/1": "We don't need EvalPlanQual unless we get updated tuple version(s)", "/versions/18/sections/3/paragraphs/2": "Attempt to lock the source tuple(s). (Note we only have locking rowmarks in lr_arowMarks.)", "/versions/18/sections/3/paragraphs/3": "if FDW says tuple was updated before getting locked, we need to perform EPQ testing to see if quals are still satisfied", "/versions/18/sections/3/paragraphs/4": "The target tuple was already updated or deleted by the current command, or by a later command in the current transaction. We *must* ignore the tuple in the former case, so as to avoid the \"Halloween problem\" of repeated update attempts. In the latter case it might be sensible to fetch the updated tuple instead, but doing so would require changing heap_update and heap_delete to not complain about updating \"invisible\" tuples, which seems pretty scary (table_tuple_lock will not complain, but few callers expect TM_Invisible, and we're not one of them). So for now, treat the tuple as deleted and do not process.", "/versions/18/tables/0/columns/0/label": "Text-format label", "/versions/18/tables/0/columns/1/label": "Structured node identity"}, "fallback_fields": [], "source_language": "en", "original_snapshot_sha256": "f477da270ec667e63e81b326577e07848ce9762f8a5c64778ea27a53eadf496b", "canonical_center_text_hash": "99e0bb47e0ed22285e1d60ed1efb30b4c5173e4aeac4a5ca32560b6e6b4b0c1e"}, "evidence_kind": "source and documentation", "explain_names": ["LockRows"], "partial_modes": [], "description_zh": "\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002", "comparison_data": {"node_tag": "T_LockRows", "strategies": [], "text_names": ["LockRows"], "initializer": "ExecInitLockRows", "partial_modes": [], "memory_mechanism": "unclassified", "parallel_callbacks": []}, "comparison_hash": "67f9133563e6e17a1409787c4b2ae050edaccb9feed71e462118303f83324626", "manual_language": "zh", "explain_prefixes": ["Parallel", "Async"], "runtime_verified": false, "source_inventory": {"explain": "src/backend/commands/explain.c", "executor": "src/backend/executor/execProcnode.c", "implementation": "src/backend/executor/nodeLockRows.c"}, "parallel_callbacks": [], "description_zh_html": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/zh/docs/18/sql-explain.html\" rel=\"nofollow\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/zh/docs/18/using-explain.html\" rel=\"nofollow\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>", "center_zh_rendered": "<p>\u4e3a\u884c\u9501\u5b9a\u5b50\u53e5\u9501\u5b9a\u5b50\u8ba1\u5212\u9009\u51fa\u7684\u884c\u3002</p><p>\u6838\u5fc3\u8282\u70b9\u6807\u8bc6\uff1a<code>T_LockRows</code>\uff1bEXPLAIN \u540d\u79f0\uff1a<code>LockRows</code>\u3002</p><p>\u672c\u7248\u672c\u6e90\u7801\u4e2d\u7684\u5e76\u884c\u6267\u884c\u6216\u89c2\u6d4b\u56de\u8c03\uff1a\u8be5\u8282\u70b9\u5b9e\u73b0\u4e2d\u672a\u63d0\u53d6\u5230\u6b64\u7c7b\u56de\u8c03\u3002\u56de\u8c03\u7684\u5b58\u5728\u4e0d\u8868\u793a\u8be5\u8282\u70b9\u5fc5\u7136\u652f\u6301\u5171\u4eab\u5e76\u884c\u626b\u63cf\uff1b\u5728\u5e76\u884c\u5de5\u4f5c\u8fdb\u7a0b\u4e2d\u6267\u884c\u4e5f\u4e0d\u7b49\u4e8e\u5177\u6709\u5e76\u884c\u611f\u77e5\u80fd\u529b\u3002</p><h3>\u540c\u7248\u672c\u4e2d\u6587\u624b\u518c\u8282\u9009</h3><p>\n<span>PostgreSQL</span> \u4f1a\u4e3a\u6536\u5230\u7684\u6bcf\u4e2a\u67e5\u8be2\u5236\u5b9a\u4e00\u4e2a<em>\u67e5\u8be2\u8ba1\u5212</em>\u3002\u9009\u62e9\u4e0e\u67e5\u8be2\u7ed3\u6784\u548c\u6570\u636e\u7279\u6027\u76f8\u5339\u914d\u7684\u6b63\u786e\u8ba1\u5212\uff0c\u5bf9\u83b7\u5f97\u826f\u597d\u7684\u6027\u80fd\u81f3\u5173\u91cd\u8981\uff0c\u56e0\u6b64\u7cfb\u7edf\u5185\u7f6e\u4e86\u4e00\u4e2a\u590d\u6742\u7684<em>\u89c4\u5212\u5668</em>\u6765\u5c3d\u91cf\u9009\u51fa\u597d\u7684\u8ba1\u5212\u3002\u53ef\u4ee5\u4f7f\u7528 <a href=\"/docs/18/sql-explain.html\"><code>EXPLAIN</code></a> \u547d\u4ee4\u67e5\u770b\u89c4\u5212\u5668\u4e3a\u4efb\u610f\u67e5\u8be2\u751f\u6210\u7684\u67e5\u8be2\u8ba1\u5212\u3002\u8bfb\u61c2\u8ba1\u5212\u662f\u4e00\u95e8\u9700\u8981\u7ecf\u9a8c\u79ef\u7d2f\u7684\u6280\u80fd\uff0c\u672c\u8282\u5c06\u5c1d\u8bd5\u4ecb\u7ecd\u5176\u4e2d\u7684\u57fa\u7840\u77e5\u8bc6\u3002\n   </p><p>\n    \u672c\u8282\u4e2d\u7684\u793a\u4f8b\u53d6\u81ea\u6267\u884c\u8fc7 <code>VACUUM ANALYZE</code> \u7684\u56de\u5f52\u6d4b\u8bd5\u6570\u636e\u5e93\uff0c\u4f7f\u7528\u7684\u662f v18 \u5f00\u53d1\u7248\u672c\u6e90\u7801\u3002\u5982\u679c\u81ea\u884c\u5c1d\u8bd5\u8fd9\u4e9b\u793a\u4f8b\uff0c\u901a\u5e38\u5e94\u5f53\u80fd\u5f97\u5230\u76f8\u8fd1\u7684\u7ed3\u679c\uff0c\u4f46\u4f30\u8ba1\u4ee3\u4ef7\u548c\u884c\u8ba1\u6570\u53ef\u80fd\u7565\u6709\u5dee\u5f02\uff0c\u56e0\u4e3a <code>ANALYZE</code> \u751f\u6210\u7684\u7edf\u8ba1\u4fe1\u606f\u6765\u81ea\u968f\u673a\u91c7\u6837\u800c\u975e\u7cbe\u786e\u8ba1\u6570\uff0c\u800c\u4e14\u4ee3\u4ef7\u672c\u8eab\u5728\u67d0\u79cd\u7a0b\u5ea6\u4e0a\u4e5f\u4f9d\u8d56\u4e8e\u5e73\u53f0\u3002\n   </p><p>\n    \u8fd9\u4e9b\u793a\u4f8b\u4f7f\u7528 <code>EXPLAIN</code> \u9ed8\u8ba4\u7684<span>\u201c<span>text</span>\u201d</span>\u8f93\u51fa\u683c\u5f0f\uff0c\u5b83\u7d27\u51d1\u4e14\u4fbf\u4e8e\u4eba\u5de5\u9605\u8bfb\u3002\u5982\u679c\u5e0c\u671b\u5c06 <code>EXPLAIN</code> \u7684\u8f93\u51fa\u4ea4\u7ed9\u7a0b\u5e8f\u505a\u8fdb\u4e00\u6b65\u5206\u6790\uff0c\u5219\u5e94\u6539\u7528\u673a\u5668\u53ef\u8bfb\u7684\u8f93\u51fa\u683c\u5f0f\uff08XML\u3001JSON \u6216 YAML\uff09\u3002\n   </p><p><a href=\"/docs/18/using-explain.html\">\u67e5\u770b\u5b8c\u6574\u4e2d\u6587\u624b\u518c\u4e0e\u4e0a\u4e0b\u6587</a>\u3002</p><p>\u672c\u9875\u5f00\u5934\u7684\u4e2d\u6587\u8bf4\u660e\u4e3a PG.CENTER \u5bf9\u7f16\u8f91\u8bf4\u660e\u7684\u7ffb\u8bd1\uff1b\u624b\u518c\u8282\u9009\u4fdd\u7559\u5bf9\u5e94\u7248\u672c\u4e2d\u6587\u6587\u6863\u539f\u6587\u3002\u6e90\u7801\u4fe1\u606f\u53ca\u624b\u518c\u793a\u4f8b\u4e0d\u4ee3\u8868\u91cd\u65b0\u8fdb\u884c\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u3002</p>"}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}