{"id":426,"date":"2014-06-15T14:51:21","date_gmt":"2014-06-15T06:51:21","guid":{"rendered":"http:\/\/www.royalwzy.com\/?p=426"},"modified":"2014-08-15T14:59:56","modified_gmt":"2014-08-15T06:59:56","slug":"%e8%b0%83%e4%bc%98%e5%ae%9e%e8%b7%b504-%e5%88%a9%e7%94%a8force_matching_signature%e6%8d%95%e8%8e%b7%e9%9d%9e%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8fsql%e8%af%ad%e5%8f%a5","status":"publish","type":"post","link":"http:\/\/www.royalwzy.com\/?p=426","title":{"rendered":"\u8c03\u4f18\u5b9e\u8df504&#8211;\u5229\u7528FORCE_MATCHING_SIGNATURE\u6355\u83b7\u975e\u7ed1\u5b9a\u53d8\u91cfSQL\u8bed\u53e5"},"content":{"rendered":"<div>\u5229\u7528FORCE_MATCHING_SIGNATURE\u6355\u83b7\u975e\u7ed1\u5b9a\u53d8\u91cfSQL\u8bed\u53e5<br \/>\n1.10g\u4e4b\u540e\u7684v$sql\u89c6\u56fe\u589e\u52a0\u4e86\u4e24\u5217:<br \/>\n1.EXACT_MATCHING_SIGNATURE:Signature calculated on the normalized SQL text. The normalization includes the removal of white space and the uppercasing of all non-literal strings.<br \/>\n2.FORCE_MATCHING_SIGNATURE:Signature used when the CURSOR_SHARING parameter is set to FORCE,\u4e5f\u5c31\u662fSQL\u8bed\u53e5\u5728CURSOR_SHARING=FORCE\u6a21\u5f0f\u4e0b\u8fd0\u884c\u7684\u7b7e\u540d\u503c;<br \/>\n2.\u63a7\u5236\u5171\u4eab\u6e38\u6807\u7684\u53c2\u6570:CURSOR_SHARING<br \/>\n1.FORCE:\u5728\u4e0d\u6539\u53d8\u8bed\u4e49\u7684\u60c5\u51b5\u4e0b\u90fd\u4f7f\u7528\u6e38\u6807\u5171\u4eab,\u53ef\u80fd\u4f7f\u7528\u7684\u5e76\u4e0d\u662f\u6700\u4f18\u7684\u6267\u884c\u8ba1\u5212,\u5f3a\u5236\u7ed1\u5b9a\u53d8\u91cf,\u5e76\u5728\u5de6\u8fb9\u7684\u5217\u8fdb\u884cto_char\u8f6c\u6362;<br \/>\n2.EXACT:\u9ed8\u8ba4\u503c,\u53ea\u6709\u5728SQL\u8bed\u53e5\u5b8c\u5168\u4e00\u81f4\u7684\u60c5\u51b5\u4e0b\u624d\u5171\u4eab\u6e38\u6807;<br \/>\n3.SIMILAR:\u5728\u4e0d\u6539\u53d8\u8bed\u4e49\u6216\u8005\u4e0d\u964d\u4f4e\u6027\u80fd\u7684\u60c5\u51b5\u4e0b,\u5c3d\u91cf\u91c7\u7528\u6e38\u6807\u5171\u4eab,\u4e00\u822c\u7528\u4e8e\u7b2c\u4e09\u65b9\u7684\u7cfb\u7edf,\u65e0\u6cd5\u4fee\u6539\u6e90\u7801\u7684\u60c5\u51b5;<br \/>\n3.\u6267\u884c\u8ba1\u5212\u76f8\u5173\u5185\u5bb9:<br \/>\n1.v$sql_plan:\u5728Shared Pool\u4e2d\u7684Library Cache\u4e2d\u4fdd\u5b58\u7684\u5b9e\u9645\u4f7f\u7528\u7684\u6267\u884c\u8ba1\u5212;<br \/>\n2.\u67e5\u770b\u5b9e\u9645\u7684\u6267\u884c\u8ba1\u5212:SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(&#8216;sql_id&#8217;));<br \/>\n4.\u5728CURSOR_SHARING=EXACT\u6a21\u5f0f\u4e0b\u67e5\u770b\u4f7f\u7528\u5b57\u9762\u503c\u7684sql\u8bed\u53e5;<br \/>\n4.1\u521b\u5efa\u6d4b\u8bd5\u8868;<br \/>\nCREATE TABLE tb_sqltuning AS SELECT * FROM dba_objects;<br \/>\nALTER TABLE TB_SQLTUNING ADD CONSTRAINT PK_sqltuning_sqlid PRIMARY KEY (OBJECT_ID);<br \/>\n4.2\u6e05\u9664shared pool\u5185\u5bb9;<br \/>\nALTER SYSTEM FLUSH SHARED_POOL;<br \/>\n4.3\u6267\u884c\u6d4b\u8bd5sql;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 1;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 2;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 3;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 4;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 5;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 6;<br \/>\n4.4\u67e5\u770bsql\u7684\u4fe1\u606f;<br \/>\nSELECT sql_text,<br \/>\nsql_id,<br \/>\naddress,<br \/>\nhash_value,<br \/>\nplan_hash_value,<br \/>\nis_shareable,<br \/>\nexecutions,<br \/>\nparse_calls,<br \/>\nchild_address,<br \/>\nchild_number,<br \/>\nforce_matching_signature,<br \/>\nexact_matching_signature<br \/>\nFROM v$sql<br \/>\nWHERE sql_text LIKE &#8216;%SQL_TUNING_LITERAL%&#8217; AND<br \/>\nsql_text NOT LIKE &#8216;%LIKE%&#8217;;<br \/>\n4.5\u7ed3\u8bba;<br \/>\n\u6bcf\u4e00\u6761sql\u90fd\u4f1a\u8fdb\u884c\u786c\u7ed3\u6790\u5e76\u4ea7\u751f\u4e0d\u540c\u7684\u6267\u884c\u8ba1\u5212,\u5b83\u4eec\u7684exact_matching_signature\u4e0d\u540c,\u4f46\u662fforce_matching_signature\u76f8\u540c;(plan_hash_value\u76f8\u540c\u66f4\u8bf4\u660e\u4e86,\u4e0d\u540c\u7684sql\u4ea7\u751f\u7684\u6267\u884c\u8ba1\u5212\u662f\u76f8\u540c\u7684,\u9700\u8981\u4f18\u5316)<br \/>\n5.\u5728CURSOR_SHARING=EXACT\u6a21\u5f0f\u4e0b\u67e5\u770b\u4f7f\u7528\u7ed1\u5b9a\u53d8\u91cf\u7684sql\u8bed\u53e5;<br \/>\n5.1\u6e05\u9664shared pool\u5185\u5bb9;<br \/>\nALTER SYSTEM FLUSH SHARED_POOL;<br \/>\n5.2\u6267\u884c\u6d4b\u8bd5sql;<br \/>\nVARIABLE id NUMBER;<br \/>\nEXEC :id := 1;<br \/>\nSELECT \/* SQL_TUNING_BIND *\/ * FROM tb_sqltuning WHERE object_id = :id;<br \/>\nEXEC :id := 2;<br \/>\nSELECT \/* SQL_TUNING_BIND *\/ * FROM tb_sqltuning WHERE object_id = :id;<br \/>\nEXEC :id := 3;<br \/>\nSELECT \/* SQL_TUNING_BIND *\/ * FROM tb_sqltuning WHERE object_id = :id;<br \/>\nEXEC :id := 4;<br \/>\nSELECT \/* SQL_TUNING_BIND *\/ * FROM tb_sqltuning WHERE object_id = :id;<br \/>\nEXEC :id := 5;<br \/>\nSELECT \/* SQL_TUNING_BIND *\/ * FROM tb_sqltuning WHERE object_id = :id;<br \/>\nEXEC :id := 6;<br \/>\nSELECT \/* SQL_TUNING_BIND *\/ * FROM tb_sqltuning WHERE object_id = :id;<br \/>\n5.3\u67e5\u770bsql\u4fe1\u606f;<br \/>\nSELECT sql_text,<br \/>\nsql_id,<br \/>\naddress,<br \/>\nhash_value,<br \/>\nplan_hash_value,<br \/>\nis_shareable,<br \/>\nexecutions,<br \/>\nparse_calls,<br \/>\nchild_address,<br \/>\nchild_number,<br \/>\nforce_matching_signature,<br \/>\nexact_matching_signature<br \/>\nFROM v$sql<br \/>\nWHERE sql_text LIKE &#8216;%SQL_TUNING_BIND%&#8217; AND<br \/>\nsql_text NOT LIKE &#8216;%LIKE%&#8217;;<br \/>\n5.4\u7ed3\u8bba;<br \/>\n\u53ea\u8fdb\u884c\u4e00\u6b21\u786c\u7ed3\u6790,\u4e4b\u540e\u7684\u8bed\u53e5\u4f7f\u7528\u76f8\u540c\u7684\u6267\u884c\u8ba1\u5212,\u5b83\u4eec\u7684exact_matching_signature\u548cforce_matching_signature\u90fd\u76f8\u540c;<br \/>\n\u786c\u7ed3\u6790\u4e86\u4e09\u6b21\u662f\u5e94\u4e3a11g\u91cc\u9762SPM(Sql Plan Management)\u7684\u7279\u6027,\u5b83\u53ef\u4ee5\u81ea\u52a8\u5b66\u4e60\u5e76\u9009\u62e9\u6700\u4f18\u7684\u6267\u884c\u8ba1\u5212,\u6700\u5927\u7684\u4f18\u70b9\u662f\u901a\u8fc7\u907f\u514d\u6267\u884c\u8ba1\u5212\u7684\u9000\u5316,\u4ece\u800c\u4fdd\u8bc1\u7cfb\u7edf\u6027\u80fd\u7684\u7a33\u5b9a;10g\u7684\u8bdd\u7b2c\u4e00\u6b21\u4ea7\u751f\u6267\u884c\u8ba1\u5212\u5c31\u56fa\u5b9a\u4e86,\u5f88\u53ef\u80fd\u4e0d\u662f\u6700\u4f18\u7684\u6267\u884c\u8ba1\u5212;<br \/>\n1.\u7b2c\u4e00\u6b21\u6267\u884cSQL\u7684\u65f6\u5019\u8ddf\u539f\u6765\u4e00\u6837,\u4ec0\u4e48\u4e5f\u4e0d\u505a,\u53ea\u662f\u628a\u6267\u884c\u8ba1\u5212\u4fdd\u5b58\u5728Library Cache\u4e2d;<br \/>\n2.\u7b2c\u4e8c\u6b21\u6267\u884cSQL\u7684\u65f6\u5019\u4f1a\u4ea7\u751fPlan History,\u800c\u4e14Plan Baseline\u4e3a\u7a7a,\u628a\u8fd9\u6b21\u7684\u6267\u884c\u8ba1\u5212\u653e\u5230Plan Baseline\u4e2d,\u5e76\u4e14\u56fa\u5b9a\u6267\u884c\u8ba1\u5212;<br \/>\n3.\u7b2c\u4e09\u6b21\u6267\u884cSQL\u7684\u65f6\u5019,\u4f1a\u628a\u4ea7\u751f\u7684\u6267\u884c\u8ba1\u5212\u653e\u5165\u5230Plan History\u4e2d,\u4f46\u662f\u4e0d\u4f1a\u8fdb\u5165Plan Baseline;<br \/>\n6.\u4fee\u6539\u53c2\u6570,\u5728CURSOR_SHARING=SIMILAR\u6a21\u5f0f\u4e0b\u67e5\u770b\u4f7f\u7528\u5b57\u9762\u503c\u7684sql\u8bed\u53e5;<br \/>\n6.1\u4fee\u6539\u53c2\u6570;<br \/>\nALTER SYSTEM SET cursor_sharing = SIMILAR<br \/>\n6.2\u6e05\u9664shared pool\u5185\u5bb9;<br \/>\nALTER SYSTEM FLUSH SHARED_POOL;<br \/>\n6.3\u6267\u884c\u6d4b\u8bd5sql;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 1;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 2;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 3;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 4;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 5;<br \/>\nSELECT \/* SQL_TUNING_LITERAL *\/ * FROM tb_sqltuning WHERE object_id = 6;<br \/>\n6.4\u67e5\u770bsql\u7684\u4fe1\u606f;<br \/>\nSELECT sql_text,<br \/>\nsql_id,<br \/>\naddress,<br \/>\nhash_value,<br \/>\nplan_hash_value,<br \/>\nis_shareable,<br \/>\nexecutions,<br \/>\nparse_calls,<br \/>\nchild_address,<br \/>\nchild_number,<br \/>\nforce_matching_signature,<br \/>\nexact_matching_signature<br \/>\nFROM v$sql<br \/>\nWHERE sql_text LIKE &#8216;%SQL_TUNING_LITERAL%&#8217; AND<br \/>\nsql_text NOT LIKE &#8216;%LIKE%&#8217;;<br \/>\n6.5\u7ed3\u8bba;<br \/>\n\u8ddf\u5728EXACT\u6a21\u5f0f\u4e0b\u4f7f\u7528\u7ed1\u5b9a\u53d8\u91cf\u7684\u7ed3\u679c\u4e00\u81f4:\u6bcf\u4e00\u6761sql\u90fd\u4f1a\u8fdb\u884c\u786c\u7ed3\u6790\u5e76\u4ea7\u751f\u4e0d\u540c\u7684\u6267\u884c\u8ba1\u5212,\u5b83\u4eec\u7684exact_matching_signature\u4e0d\u540c,\u4f46\u662fforce_matching_signature\u76f8\u540c;<br \/>\n7.How to Find Literal SQL in Shared Pool;<br \/>\nDECLARE<br \/>\nb_myadr\u00a0\u00a0 VARCHAR2(20);<br \/>\nb_myadr1\u00a0 VARCHAR2(20);<br \/>\nqstring\u00a0\u00a0 VARCHAR2(100);<br \/>\nb_anybind NUMBER;<\/p>\n<p>CURSOR my_statement IS<br \/>\nSELECT address FROM v$sql GROUP BY address;<br \/>\nCURSOR getsqlcode IS<br \/>\nSELECT substr(sql_text, 1, 60) FROM v$sql WHERE address = b_myadr;<br \/>\nCURSOR kglcur IS<br \/>\nSELECT kglhdadr<br \/>\nFROM x$kglcursor<br \/>\nWHERE kglhdpar = b_myadr AND<br \/>\nkglhdpar != kglhdadr AND<br \/>\nkglobt09 = 0;<br \/>\nCURSOR isthisliteral IS<br \/>\nSELECT kkscbndt FROM x$kksbv WHERE kglhdadr = b_myadr1;<br \/>\nBEGIN<br \/>\ndbms_output.enable(10000000);<br \/>\nOPEN my_statement;<br \/>\nLOOP<br \/>\nFETCH my_statement<br \/>\nINTO b_myadr;<br \/>\nOPEN kglcur;<br \/>\nFETCH kglcur<br \/>\nINTO b_myadr1;<br \/>\nIF kglcur%FOUND THEN<br \/>\nOPEN isthisliteral;<br \/>\nFETCH isthisliteral<br \/>\nINTO b_anybind;<br \/>\nIF isthisliteral%NOTFOUND THEN<br \/>\nOPEN getsqlcode;<br \/>\nFETCH getsqlcode<br \/>\nINTO qstring;<br \/>\ndbms_output.put_line(&#8216;Literal:&#8217; || qstring || &#8216; address: &#8216; || b_myadr);<br \/>\nCLOSE getsqlcode;<br \/>\nEND IF;<br \/>\nCLOSE isthisliteral;<br \/>\nEND IF;<br \/>\nCLOSE kglcur;<br \/>\nEXIT WHEN my_statement%NOTFOUND;<br \/>\nEND LOOP;<br \/>\nCLOSE my_statement;<br \/>\nEND;<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5229\u7528FORCE_MATCHING_SIGNATURE\u6355\u83b7\u975e\u7ed1\u5b9a\u53d8\u91cfSQL\u8bed\u53e5 1.10g\u4e4b\u540e\u7684v$sql\u89c6\u56fe\u589e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[34,8],"class_list":["post-426","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-oracle","tag-performance"],"_links":{"self":[{"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=\/wp\/v2\/posts\/426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=426"}],"version-history":[{"count":0,"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=\/wp\/v2\/posts\/426\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=426"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.royalwzy.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}