В 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>
Утилита
Комментариев нет:
Отправить комментарий