В Cache5 появилась утилита показа плана выполнения запроса
ShowPlan^%apiSQL .
SQL Manager сделан специальный класс -
наследник %CSP.Page для показа плана выполнения непосредственно в
одном из окон SQL Manager , %SQL.Manager.ShowPlan . Для
просмотра плана выполнения нужно ввести текст запроса и нажать кнопку показать
план. В нижней части вместо результата выполнения появится html - страница с
планом.
Мне показалось полезным иметь возможность видеть отдельно результат выполнения и план запроса. Для этого нужно запустить дваSQL Manager . Но,
поскольку показ плана выполняет CSP страница, её функциональность можно
интегрировать в небольшую самодельную страничку, разместив управляющие элементы
по своему вкусу.
В результате получилось три файла:ShowPlan^%apiSQL форматирует план запроса в XML,
поэтому могут быть дополнительно использованы анализаторы фрагментов плана для их
показа различным способом.
USER>zn "samples" SAMPLES>s %msql="_SYSTEM" SAMPLES>s sql=1 SAMPLES>s sql(1)="select * from Sample.Person" SAMPLES>d ShowPlan^%apiSQL(.sql,1) SAMPLES>w %msql="_SYSTEM" %plan=9 %plan(1)="<plan>" %plan(2)="<sql>" %plan(3)="select * from Sample.Person" %plan(4)="</sql>" %plan(5)="<cost value="5047000"/>" %plan(6)="Read master map Sample.Person.IDKEY, looping on ID." %plan(7)="For each row:" %plan(8)=" Output the row." %plan(9)="</plan>"Для интеграции в
Мне показалось полезным иметь возможность видеть отдельно результат выполнения и план запроса. Для этого нужно запустить два
В результате получилось три файла:
- Контейнер для двух фреймов - в верхнем вводить текст запроса, в нижнем показывать план выполнения.
- Верхний фрейм, для ввода текста запроса и выбора области.
- Нижний фрейм, фактически переходник на метод класса
##class(%SQL.Manager.ShowPlan).ShowPlan()
<HTML> <HEAD> <TITLE>View SQL Plan</TITLE> </HEAD> <FRAMESET ROWS="115,*"> <FRAME SRC="ViewPlanTop.csp" NAME="select"> <FRAME SRC="" NAME="viewplan"> </FRAMESET> </HTML>Верхний фрейм на CSP, ViewPlanTop.csp:
<HTML> <HEAD> <TITLE>Enter SQL Select Here</TITLE> <script> function NSChange() { document.location.href= "ViewPlanTop.csp?namespace="+encodeURIComponent(document.forms.selectform.namespace.value)+ "&sql="+encodeURIComponent(document.forms.selectform.sql.value); return; } </script> </HEAD> <BODY> <form name=selectform target="viewplan" method="post" action="ShowPlan.csp"> <textarea name=sql rows=3 cols=80><server> w %request.Get("sql") </server></textarea> <table> <tr> <td> Namespace: </td> <td> <SELECT NAME="namespace" onchange="NSChange();"> <server> n i,nslist,namespace s namespace=%request.Get("namespace") f i=1:1:$ZU(90,0) s nslist($ZU(90,2,0,i))="" s i="" f s i=$o(nslist(i)) q:i="" d . i i=namespace w "<option selected value="_i_">"_i_"</option>" . e w "<option value="_i_">"_i_"</option>" </server> </SELECT> </td> <td> <input type=submit value="Show Plan"> </td> </tr> </table> </form> </BODY> </HTML>И нижний фрейм на CSP, файл ShowPlan.csp:
<HTML> <HEAD> <TITLE>Show Plan</TITLE> </HEAD> <BODY> <server> n username,namespace,savenamespace s savenamespace=$zu(5) s namespace=%request.Get("namespace",1) zn namespace s %msql="_SYSTEM" d ##class(%SQL.Manager.ShowPlan).ShowPlan(%request.Get("sql",1)) zn savenamespace </server> </BODY> </HTML>Утилита
Комментариев нет:
Отправить комментарий