Extraindo Metadados de SGBDs - DI PUC-Rio

Propaganda
ISSN 0103-9741
Monografias em Ciência da Computação
n° XX/07
Extraindo Metadados de SGBDs
José Maria Monteiro
Sérgio Lifschitz
Ângelo Brayner
Departamento de Informática
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO
RUA MARQUÊS DE SÃO VICENTE, 225 - CEP 22453-900
RIO DE JANEIRO - BRASIL
Monografias em Ciência da Computação, No. XX/07
Editor: Prof. Carlos José Pereira de Lucena
ISSN: 0103-9741
Dezembro, 2007
Extraindo Metadados de SGBDs *
José Maria Monteiro, Sérgio Lifschitz, Ângelo Brayner1
1
Mestrado em Informática Aplicada – Universidade de Fortaleza (UNIFOR)
[email protected], [email protected], [email protected]
!"
&!"
#
$
&!"
'&
'(
"
%
)* +
,-
&
./
./ 1
+
*--0 "
&!"
2
34
8
5
6
7
8
9
:
;
<
34
<
=
:
7
5
>!& ( 2
>!& ?
>!&
$
%
)* +
,-
<
'(
72
2
34
./
6
<
79
&
8
35
@
'"
6
>!&
>!&
*--0
<
>!&
In charge of publications'
Rosane Teles Lins Castilho
Assessoria de Biblioteca, Documentação e Informação
PUC-Rio Departamento de Informática
Rua Marquês de São Vicente, 225 - Gávea
22453-900 Rio de Janeiro RJ Brasil
Tel. +55 21 3114-1516 Fax: +55 21 3114-1530
E-mail: [email protected]
Web site: http://bib-di.inf.puc-rio.br/techreports/
ii
1 Introdução
+
2
34
5
6
(
34
=
7
8
8
@
35
< %
B
;
$&!7
35
>
>!& $
<
2
A
9
$
&
<
5
%
$
;
%
$ 9
!
&
B
%
6
34 %
7
>!&
&!7
5
8
8
6
35 8
&
8
34
>!&
&!7
35
&!7 5
(
>!& ?
=
./
$
./
%
C
C
B
<
=
8
B
>!&
<;
2
2
/
2
./
7
;
34
(
2
2
8
./ ;
2
;
(D
8
34
&!7
8
5
8
9
(
34
=
;
34
./
&
6
8
B
>!&
2;
9
9
3
@
2
5
' 8
;
34
34
8
34
D
E
7
F**G
;H:
5
34
=
B
5
5
2
I%
2
;H
35
$I
2
7
34
;
8
;
35
1
Entretanto, associar medidas de desempenho a uma combinação de tarefas requer
cuidado. A maneira correta de tirar a média dos números é tomar o tempo total para conclusão da carga de trabalho no lugar da produtividade média para cada tipo de transação.
Portanto, uma única tarefa não é suficiente para quantificar o desempenho do sistema.
Este deve ser medido por um conjunto selecionado de tarefas chamado nível de referência de desempenho, mais conhecido como benchmark [22].
?
>!&
;
8
;
>!& (
>!& @
7
2
35
C
6
%
<
2
34
./
6
$
&!7
2
34 $I
<
8
$
I% 5
6
6
35
6
C
8
%
( 2
>!& &
$
+
C
8
./
35 2
,- 2
2
&!7 %
%
9
%
&!7
./
*--0 7 2
$
<
=
8
<
=
=
$
8
8
Este trabalho discute como extrair os metadados dos principais SGBDs comerciais:
Postgres, Oracle 10g e SQL Server 2005. As informações capturadas podem ser utilizadas pelos DBAs para a analise da performance dos SGBDs e para descobrir problemas
de desempenho. Além disso, os metadados recuperados ajudam a guiar o DBA na seleção das possíveis soluções para os problemas encontrados.
O restante deste trabalho está organizado da seguinte maneira: a seção 2 discute o
conceito e a utilização dos metadados, na seção 3 mostramos como extrair os metadados
do Postgres 8.2, a seção 4 ilustra como recuperar os metadados do Oracle 10g, na seção
5 discutimos a extração dos metadados no SQL Server 2005 e a seção 6 conclui este trabalho.
2 Metadados
Os metadados são frequentemente descritos como “dados sobre dados”. Ou seja,
não são mais do que informações adicionais (além da informação espacial e tabular) que
é necessária para que os dados se tornem úteis. Por outras palavras, são um conjunto de
características sobre os dados que não estão normalmente incluídas nos dados propriamente ditos.
2
A partir desta definição pode então concluir-se os usos mais significativos dos metadados. São eles:
- Adicionar contexto e conhecimento sobre os dados acessados pelos usuários.
- Esconder (abstrair) a complexidade dos dados dos usuários que não necessitam
conhecer os detalhes técnicos dos dados.
- Descobrir os tipos dos dados, os relacionamentos entre os dados, o momento
em que um dato foi lido ou atualizado pela última vez.
- Possibilitar às aplicações executarem checagem de tipo, validação, formatação,
etc.
- Possibilitar a análise do desempenho do SGBD.
Alguns exemplos de metadados incluem: modelos de dados, esquemas, tabelas, colunas, índices, últimas cláusulas SQL executadas, planos de execução das consultas executadas, etc.
3 Postgresql
+
2
9
D
;
=
$ >&!+J%
&
+
!
6
:
35
8
F,0G
+
2
5
=
./ *--K
;
2
'
•
E
•
>
•
L 4 "
$
%
<
•
:
"
5
72
8
'
•
&
•
M
•
J
•
@
•
/
E
34
$
%
N
(
&
%
;
8
6
=
; ;
8
6
3 ;
7
3 ! &$
;
=
<
9
:
3
!
+
8
2
<
;
@
34
9
6
2
34
>!& ?
9
4
35
#
O
34
O
35
2
6
O
2
O
2
O
5
O
$I
O
$
6
O
I%
4
O
%
;H:
34
4 $I
35
34 I%
34
34
34
O
34
5
O
;
O
:
O
34
O
<
9
8
9
34
O
;
6
3
O
34
9
9
O
35
6
;
O
2
O
O
35
8
O
O
2
7
4
"
O
34
8
34
O
O
8
O
6
O
3
9
O
O
$
!
4
6
8
? M
K,
#
' (
<
8
%&
!
!
7
4 $
%
4
7
A
;H
<
@
5
'
5
$
%
"
' )
#
O
N
O
! ;
O
J
O
34
O
@
6
O
D
8
O
L 4
B
<
O
$
+,
' (
*
&
+
6
2
34
=
7
6
35
=
D
2
<;
6
2
A
34
B
!
B
9
"
"
;
"
35
=
5
;
35
+
6
;
"
P8
B
"
;
35 ;
"
2
"
;
6
35
"
35 &
6
6
6
6
7
6
;
!
2
#$ %& '
8
'
% %(
Q
Q JD? " @
Q
Q
Q
Q
Q
7
"
O
O
O
O
O
O
O
O
Q .
R
R
R
R
S
O
O
O
O
O
O
R
O
R
O
R
O
R
O O
O
R
-
0' (
%
.
/)
.
&
@ 5
6
4
2
6
6
4
<
7
<
<
6
34
6
9
6
;
2
34
5
5
<
E
35
5
2
8
<
"
5
34
+
2;
=
$0--
"
A
;
6
=
<
4
34
6
6
5
5
=
5% (
2
2
B
(
35
;
6
35
;
<
8
C
7
A
2
6
?
5
O
O
&
35
D
&
8
;
7
3
;
5
B
O
6
O
;
8
72
;
8
5
8
9
8
$&
;
;
2
8
35 %
O
O
D
C
34
34
$
9
34
%
O
O O
(
C
'
;H
6
E
E
<
O
O
O
+
6
;
O
O O
;
;
O
O O
;
5
O
O
O
+
5
8
8
O
O O
(
6
6
;
C
<
6
6
C
$(
;
6
%
O
O
O
+
;
5
O
O
O
+
O
O O
;
O O
;
6
;
5
O
6
8
pg_statio_all_tables
Para cada tabela do banco de dados corrente, o número
total de blocos de disco da tabela lidos, o número de
acertos no buffer, o número de blocos de disco lidos e
acertos no buffer para todos os índices da tabela, o
número de blocos de disco lidos e acertos no buffer
para a tabela auxiliar TOAST da tabela (se houver), e o
número de blocos de disco lidos e acertos no buffer
para o índice da tabela TOAST.
pg_statio_sys_tables
O mesmo que pg_statio_all_tables, exceto que somente são mostradas as tabelas do sistema.
pg_statio_user_tables
O mesmo que pg_statio_all_tables, exceto que somente são mostradas as tabelas de usuário.
pg_statio_all_indexes
Para cada índice do banco de dados corrente, o número
de blocos de disco lidos e de acertos no buffer para o
índice.
pg_statio_sys_indexes
O mesmo que pg_statio_all_indexes, exceto que
somente são mostrados os índices das tabelas do sistema.
pg_statio_user_indexes
O mesmo que pg_statio_all_indexes, exceto que
somente são mostrados os índices das tabelas de usuário.
pg_statio_all_sequences
Para cada objeto de seqüência do banco de dados corrente, o número de blocos de disco lidos e de acertos no
buffer para a seqüência.
pg_statio_sys_sequences
O mesmo que pg_statio_all_sequences, exceto que
somente são mostradas as seqüências do sistema (Atualmente não está definida nenhuma seqüência do sistema e, portanto, esta visão está sempre vazia).
pg_statio_user_sequences O mesmo que pg_statio_all_sequences, exceto que
somente são mostradas as seqüências de usuário.
$
' (
&
9
*
1#
/(
2 &
(
<
5 @
34
5
34
2
=
7
6
34
34
;
6
A
KT 7
9
;
6
34
+&
34
$&
<
4
;
;
6
+&
;
6
% 7
C
&
C
Função
Tipo Retornado
pg_stat_get_db_numbackends(oid)
integer
pg_stat_get_db_xact_commit(oid)
bigint
pg_stat_get_db_xact_rollback(oid)
bigint
pg_stat_get_db_blocks_fetched(oid)
bigint
pg_stat_get_db_blocks_hit(oid)
bigint
pg_stat_get_numscans(oid)
bigint
pg_stat_get_tuples_returned(oid)
bigint
pg_stat_get_tuples_fetched(oid)
bigint
Descrição
Número de processos
servidor ativos
conectados ao banco
de dados
Transações efetivadas
no banco de dados
Transações canceladas
no banco de dados
Número de solicitações
de busca de blocos de
disco para o banco de
dados
Número de solicitações
de busca de blocos de
disco para o banco de
dados encontradas no
cache
10
Número de varreduras
seqüenciais realizadas
quando o argumento é
uma tabela, ou o
número de varreduras
de índice quando o
argumento é um índice
Número de linhas lidas
por varreduras
seqüenciais quando o
argumento é uma
tabela, ou o número de
linhas do índice lidas
quando o argumento é
um índice
Número de linhas
válidas (não expiradas)
pg_stat_get_tuples_inserted(oid)
bigint
pg_stat_get_tuples_updated(oid)
bigint
pg_stat_get_tuples_deleted(oid)
bigint
pg_stat_get_blocks_fetched(oid)
bigint
pg_stat_get_blocks_hit(oid)
bigint
pg_stat_get_backend_idset()
conjunto de
integer
pg_backend_pid()
integer
pg_stat_get_backend_pid(integer)
integer
pg_stat_get_backend_dbid(integer)
oid
pg_stat_get_backend_userid(integer)
oid
pg_stat_get_backend_activity(integer)
11
text
da tabela buscadas por
varreduras seqüenciais
quando o argumento é
uma tabela, ou
buscadas por
varreduras de índice,
utilizando este índice,
quando o argumento é
um índice
Número de linhas
inseridas na tabela
Número de linhas
atualizadas na tabela
Número de linhas
excluídas da tabela
Número de solicitações
de busca de bloco de
disco para a tabela ou
índice
Número de solicitações
de busca de bloco de
disco encontradas no
cache para a tabela ou
o índice
Conjunto de IDs de
processos servidor
ativos no momento (de
1 ao número de
processos servidor
ativos). Veja o
exemplo de utilização
no texto.
ID de processo do
processo servidor
conectado à sessão
corrente
ID de processo do
processo servidor
especificado
ID de banco de dados
do processo servidor
especificado
ID de usuário do
processo servidor
especificado
Comando ativo do
processo servidor
especificado (nulo se o
usuário corrente não
pg_stat_get_backend_activity_start(in
teger)
pg_stat_reset()
$
+%#
3 &4
/(
$
&
for um superusuário
nem o mesmo usuário
da sessão sendo
consultada, ou se
stats_command_string
não estiver habilitado)
timestamp with A hora em que o
time zone
comando executando
no momento, no
processo servidor
especificado, começou
(nulo se o usuário
corrente não for um
superusuário nem o
mesmo usuário da
sessão sendo
consultada, ou se
stats_command_string
não estiver habilitado)
boolean
Reinicia todas as
estatísticas atualmente
coletadas
2 &
*
!
9
*
8
$
7
'
=
C
8
35
./
./ $
% 7
A
;
./
35
34
./
%
9
4
<
12
S+
C
< ;
6
34
"
O
' )
5
O
/)
D
&
8
;
;
5
7
O
3
6
O
8
B
72
;
5
8
9
;
8
8
$&
2
;
;
8
35 %
O
O O
(
6
6
;
<
C
6
$(
6
%
$
0%' (
13
&
6
7
6
;
C
"
#
/)
$
O
O
O
O
O
O
O
O
5
%
/)
&
$
%
$
8
5
8
8
O
O
5
5
%
O
O
O
O
$%
9
&
,
$
$
7 =
;
8
"
%
2 &
6
4
34
"
/(
8
K0 KU
"
1%#
C
:
34
34
>
35
)*+ ;
"
(& $
+.
./ ;
@/@
8
K*
O
O
O
O
O
O
O
-
O
O
%
(
V', - %$ W
8
35
./
%
<
35
O
MJ+" $ @/@
7
O
$
%7
$
%7
O
$% 7
%7
E
8
35
34
O;
8
./
X
14
./
&; < :" W ?
JDZ[+ ./ @\@ D 7&7 &DJ7? @ 7 +?@\[+ &+ >!&
-
9 &4
:.
/(
%,
&4
&
/)
*
;
2
'
C
8
8
34
$ 8
6
%
35
6
2
6
6
(
34
$8
!W%
8
< 35
4
&
5
4
5
9
5 2 ."%$ ','
."(-
7
35
2
7
'
9
5
;
"
;
;H:
B
'
;
9
9
>!& ;
6
4
7
KY
15
35
$8
.
5
/)
?
6
5
T
35
8
@
$
!/ ] ^%
2
<
9
7
<
L7 DD" 7?7/_^@
&//
T
J@7 @ ?&@\
?C
@
2
<
9
7
<
L7 DD" 7?7/_^@
&//
J@7 @ ?&@\
L
$
6
6
`
?&@\
%
J@7 @
5 2
&J+( ?&@\
+
L7 DD"
;
;
5
6
L
$
%
8
$
7
5
3
8
8
=> < !!
34
."%$ ','
@
6
)
34
C
;
35
16
6
$
%
9
8
$8
.
5
O
?
/)
;
;
2
6
O
?
;
O
?
6
O
?
6
$?D//
6
3
5
%
&
$
9
(
8
8
35
35
6
)
=>:"5&;&!
8
./ ;
34
5 $
%
8
(>O ?&@\@ $
."(."
2
9
-'*
<
;
'
C
C
6
7
./
5
;
'
@/@
J@/ D(/@ 7 ?D" O/ ?#7
MJ+" (>O /7
1 #@J@ J@/?7" @ ? $
@/@
7!/@?7" @
MJ+" (>O 7!/@
1 #@J@ #@" 7?7" @ / ]@ a
IW #@" 7WIa
7?& 7!/@?7" @ / ]@ a
I W ?+" @ 7!@/7 W Ia
%E
-
+
*
? *
8
@/@
J@/(7>@ 7 ?D" O(7> ?7
MJ+" (>O /7
1 #@J@ J@/?7" @ ? $
@/@
7!/@?7" @
MJ+" (>O 7!/@
1 #@J@ #@" 7?7" @ / ]@ a
IW #@" 7WIa
7?& 7!/@?7" @ / ]@ a
I W ?+" @ 7!@/7 W Ia
%E
-
$
%
6
0
*
? *
@8
17
A
@/@
$
@/@
7" ?7" @
MJ+" (>O7"
1 #@J@ (>O7" + &R (>O /7 J@/7"
% 7 ?+" @
MJ+" (>O /7
1 #@J@ J@/?7" @ / ]@ $ @/@
?&@\?7" @
MJ+" (>O ?&@\@
1 #@J@ #@" 7?7" @ / ]@ a
IW #@" 7WIa
7?& ?&@\?7" @ / ]@ a
I W ?+" @ ?& @ W Ia
%E
-
1
*
?
@/@
?&@\?7" @
MJ+" (>O ?&@\@ I
1 #@J@ #@" 7?7" @ / ]@ a
IW #@" 7WIa
7?& 7!/@?7" @ / ]@ a
I W ?+" @ 7!@/7 W Ia
E
-
3
*
?
T Oracle 10g
+
+
/
01
8
3
4
7
5 ,-
35
;
8
34
2
8
/
'2
8
35
35
?
34
6
+
35
7
'
•
4
$
5 @@@S(+ \% ;
35
;
-%3'E
•
?
I
8
I
35
35
35
E
•
"
; 35
%
35
$
18
%
$! %
8
E
•
"
,T
•
P
\" /
PL"
P&! K - 4
7
$
5
P* @
$7 " % ;
<
&
6
< 35
+
6
E
%
5
+/
8
01
8
_ ;
;
:
2
9
35
9
34
@
9
8
9
(
8
,-
/
:
=
' # ' "+ --"
;
8
35
6
5
"!
;
7
'
6!& >B
9
<<>B
=
9
5C >B
6
8
8
8
9
72
:
4
? M
;
/
B
T,
8
Lb$
4 ;
+
3
<
,- 2
6
2
Lb%
8
/
19
#
+
&
5
7
5
,
4
&!7O 7
4
, D
9
B
<
9
6
34
$
B
2
35
$
>
B
$
>
B
:
35
2
4 B
: >
34
34
6
'
34
6
;
< 35
: >
B
2
34
34
20
6
5
2
B
;
5
>
B
!*
B
!
B
6
35
34
9
B
8
D @J?7" @ D @JO & 7
'
35
34
+D? O 7 D
@
+? (J+ @
B
68
>
B
6
$ 8 B
$ 8>
B
$ 8 >E
B
2
"
>$
B
35
, D >$
B
V
X$
%
8
<
34
B
/+! $/
+ 9
8
9
%
8
6
;
34
E
>
B
E
>
B
B
2
35
21
;
+
4
+
B
,- 2
4
B
;
4
Lb @
6
8
4
>!& @
++
,-
8
&
=
8
4
B
5 56 ( %5'" ' %/$"7% / 8 ;
34
7
4 Lb
5
5
7
< 35
<
6
8
'
•
#
7
•
•
•
•
•
!8
•
•
•
•
•
2
J
!
/
S7
SJ
&
M
&
&
.
+
+
J
&
$
S"
<
/
5
:
•
•
•
•
•
L
.
S.
+
•
•
•
/
"
"
J
•
•
(
S+
SJ
S ;
S/
7
S
S
.
22
"
D
•
5
•
:
•
•
•
&
J
•
•
(
S
/
S (
M
!
5
•
:
M
D
6
5
4
B
<
6
&4
!
9
,
8
=
8
C
5
/
,-
./
35
34
./
%
35
./
2
F
$
7
'
5
34
$
01 2 ;
/
>7
72
&
: .
L
6
34
+
.
./ $
S+
9
C
< ;
%
(
8
Lb
8
4
7
;
<
/
8
$
%
;
/
8
;
C
;
4
9
8
B
9
M
7
T*
23
;
4
#
7 =
+
%&
'G
8
;
4
M
:
5
T*
34
8
' 56 ( %5'" ' %/$"7% / 8 56 9- 56 9-" - $ 7
4
7
5 56 ( %5'" ' %/$"7% / 8
D
5
5
+
=
5
2
;
@
2
5
34
5
5
24
3 A
./
4
T,
$
./O &
5
/)
L7J #7J*$,K%
35
./
35
35
./O(/7?O#7 #OL7/D@ ?D" !@J
$
@
+
8
5
./
7
J
8
) 'G
34
6
35
2
35 ./
$:'&>!&!!:,">H:!$, I
8
T*
5
$8
5
7&&J@
J71 $T c )%
@
#7 #OL7/D@
?D" !@J
L
./O &
/)
3
35
L7J #7J*$,K%
(/7?O#7 #OL7/ ?D" !@J
D@
35
J
35
./
2
35
7
(/7?O#7 #OL7/D@
35
5
5 $
2
%
./OMD// @\
/+!
+
35
A
;O
@\@ D +?
?D" !@J
?C
35
35
5 b ;O
< ;
35
5
$
+
8
8
25
./
) 'G!-<
./
7 L 5 56 9-" - $
35
./
2
35
@
2
35
34
<
./ 7
P8
M
35
2
S+
;
C
TK
5 ;
TK
:
4
$56 ( %5'" ' %/$"7% / 8 56 9- 56 9-" - $%
V$ACTIVE_SESSION_HISTORY
V$SQL
SQL_ID
VARCHAR2(13)
ADDRESS
RAW(4|8)
SQL_PLAN_HASH_VALUE
NUMBER
HASH_VALUE
NUMBER
SQL_ID
VARCHAR2(13)
PLAN_HASH_VALUE
NUMBER
etc
etc
V$SQL_PLAN
ADDRESS
RAW(4|8)
HASH_VALUE
NUMBER
SQL_ID
VARCHAR2(13)
PLAN_HASH_VALUE
NUMBER
etc
#
+
G
26
7
<
$8
5
7&&J@
J71 $T c )%
@
#7 #OL7/D@
?D" !@J
L
/)
3
35
7&&J@
7
#7 #OL7/D@
35
6
Lb ./7J@7
./O &
L7J #7J*$,K%
(/7?O#7 #OL7/D@ ?D" !@J
./
J
35
2
35
7
(/7?O#7 #OL7/D@
35
5
5 $
+(@J7 +?
L7J #7J*$K-% ?
2
%
35
7!/@
7
+( +?
@
L7J #7J*$K-% D
35
+(@J7 +?
35
MD//
+!P@
O?7" @
L7J #7J*$K,% ?
&
?D" !@J
6
?C
6
35
+
?D" !@J
35
<
<
7J& ?7/ _
?D" !@J
@
C
35
<
+O +
?D" !@J
S+
35
(
34 ;
2?D//
$
+.
+
T,
8
8
+
8
) 'G!-<> < "
;
,- L
34
;
56 ( %5'" ' %/$"7% / 8 5
27
C
!&<& $ ./ 7&&J@
./ #7 #OL7/D@ ./ ./OMD// @\
./ @\@ D +?
# ,E Lb ./ ./
J H& & &;:!$! $ !&<& $ 7 # ./O & 7 # ./O(/7?O#7 #OL7/D@
# ,E Lb7
L@O @ +?O#
+J_ 7 #
J H& & 7 # ./O(/7?O#7 #OL7/D@ R ./ (/7?O#7 #OL7/D@
"5 7 # ./O & R ./ ./O &
%
"5 ./ ./OMD// @\ ",$ <: & a
dMJ+" Lb ./ ./da
-
+
+.
%
*
?
T*
35
8
K
4
;
8
C
+
,- $
%
!&<& $ ./ 7&&J@
./ #7 #OL7/D@ ( +(@J7 +? ( +( +?
( +O +
( 7J& ?7/ _ ./ @\@ D +?
( &
# ,E Lb ./ ./ Lb ./O(/7? (
J H& & ((/7?O#7 #OL7/D@ R ./ (/7?O#7 #OL7/D@
"5 ( ./O & R ./ ./O &
"5 &;:!$! $!&<& $ 7 # ./O & 7 # ./O(/7?O#7 #OL7/D@
# ,E Lb7
L@O @ +?O#
+J_ 7 #
J H& & 7 # ./O(/7?O#7 #OL7/D@ R ./ (/7?O#7 #OL7/D@
"5 7 # ./O & R ./ ./O &
%
"5 ./ ./OMD// @\ ",$ <: & a
dMJ+" Lb ./ ./da
-
+
+ + &4
*
:.
/(
?
8
&
4
,
/)
K
4
F
;
2
'
C
8
8
34
$ 8
6
%
35
6
2
6
6
(
34
$8
!W%
8
< 35
8
?
&
"
O
9
'
"
-'
<
"%$ ','
7
35
5
28
4
!
!
@
2
35
;
@
8
34
<
7
C
35
U
$8
+1 ?@J
"6<<
5
L7J #7J*$K-% ?+ ?D// (
7!/@O?7" @
8
L7J #7J*$K-% ?+ ?D// ?
?D" OJ+1 e
?D" !@J
?C
!/+ ] e
?D" !@J
?C
$
!
/)
++
8
8
) 5C >$ C<&!
"
@
6
6
8
7
P8
M
@
34
!W
< 35
K0
;
KU
4
<
"
-'
"%$ ','
$8
+1 ?@J
"6<<
5
L7J #7J*$K-%
?+ ?D// (
L7J #7J*$K-%
?+ ?D// ?
7!/@O+1 ?@J L7J #7J*$K-%
?+ ?D// (
7!/@O?7" @
?+ ?D// ?
?&@\O?7" @
L7J #7J*$K-%
!/@L@/e
?D" !@J
8
/)
6
6
8
?6
8
!W '
<
D
;
$
+0
8
8
29
) 5C >:"5&;&!
<
=
5
DBA_TABLES
DBA_INDEXES
OWNER
VARCHAR(30)
OWNER
VARCHAR(30)
TABLE_NAME
VARCHAR(30)
INDEX_NAME
VARCHAR(30)
TABLE_OWNER
VARCHAR(30)
TABLE_NAME
VARCHAR(30)
etc
etc
#
++
5C >$ C<&! 5C >:"5&;&!
(
34
8
./ ;
<
2
9
@
&!7O 7!/@
7!/@O+1 ?@J
'
8
6
C
8
4
.
7!/@O?7" @
?D" OJ+1
?&@\O?7" @
!/@L@/
# ,E &!7O 7!/@
&!7O ?&@\@
J H& &
7!/@O?7" @ R a
a
"5 +1 ?@J R 7!/@O+1 ?@J$W%
"5
7!/@O?7" @ R 7!/@O?7" @$W%
+
2
TK
!&<& $
-
6
<
8
;
7!/@O?7" @%
C
7
&!7O ?&@\@ $
*
/
!/+ ]
!
7
?
5 SQL Server 2005
0
7"
6
./
<
3
*--0
6
;
34 ' '2
30
+4
2
+
'
@
34
2
f
2
f
3
9
%
<
< 35 @ ;
./
*--0
35
34
(
./
<
6
35
3
3
F*-G
?
;
./
2
6
<
4
8
5
35
7
4
6
•
@
•
?
•
"
•
@
•
7
•
M
A
2
6
0
*--0
./
*--0 5 '
5
3
!
!
.
./
34
9
4 ;
$
6
% 5
<
<
(
34
35
35
31
=
9
;
8
(
./
'
,
7
2
$
* 7
2
L 4
K
7
2
34
T
+/@ &!
%
$
5
*
./
0 +&!
0
?
+
./
5
<
3
=
7&
5
$
2
%
'-'(
=
=
4
8
7
8
'
!
"
!
#$
$
!
0
8
!-< !
32
+ '7
% "7
0
e
@J
?
+
!& $
' (
!
2
"
< 35
4
L 4
@
@
=
./
L 4
5
Y4
8
;
3
+
Lb $
%
?
./
*--0
%
5
34 $
;
%'
5
(
(
4
5
5
5
&
5
&
A
:
./
2
2
*--0
7
5
;
4
9
7
4
4
8
5 *--0
7
5
4
;
5
*--0
4 ;
@
./
./
*--0
0*--0
4
33
9
4
*K-
*--0
./
2;
(
./
!?
<
5
4
7
#
7
0
(
4
!-< !
5
8
;
@
4
;
5
;
/
;
$
34 %
$
4
%
:.
!
7
'
4
34
%
5
./ g* @
34
;
34
<
;
5
8
8
<
+
8
4
S
>!&
./ g*
@
4
;
$
% @
4
5
<
6
7
;
4
;
$
%%
4
'
34
#
0
(
8 :.
7
< 35
!
'
4 '
%$%&'(
)*+, .)+*, '+./ &0%, ' $%
-- Retorna as informações armazenadas no catálogo de todas as tabelas existentes
%$%&'(
)*+, .)+*, '+./ &0%, &+$1,.
20%*% ' $%/. ,% 3 4
,5'
4
-- Retorna as informações sobre as colunas da tabela “MyTable”
%$%&'&+$1,./. ,% 6
- /.1$$ $% 6
)*+, .)+*, '+./ &0%, &+$1,.
20%*% ' $%/. ,% 3 4
' %$ 84
' /'7 %
-- Retorna o nome, se a coluna permite null e o tipo de dados de todas as colunas
-- da tabela chamada ‘TABELA1’
WITH ENCRIPTION
SELECT SPECIFIC_NAME , ROUTINE_TYPE , ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
-- Retorna o nome , o tipo de rotina ( Stored Procedure ou função ) e o código fonte da
-- rotina , desde que a mesma não tenha sido criada com a opção
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = '
VIEW'
-- Retorna todas as tabelas do banco de dados atual , que na verdade são views
35
8
'
4
./
9
4
5
@
4
$
5
%
;11<%
9-
4
;
;
$
5
@
<
;111 @
9-
5
6
9-
$
%
;11<
'
+ ./
*--0
<
4
8
$
%
@
4
<
7"
$
4
8
'
•
5
4
•
6
$
%
2
8
7
4
8
72
4
5
5
3
•
7
4
;
•
8
4
+
0
C
4
?
. /(
8
5
!-< !
D
34
9
8
2
./
./
@
Y-
36
<
34
=
%
?
<
34 '
=> / ?'( "% )* ;
./
/ ?'(
/ '
9
8)*
'-'( / ?'(
/ '
+
2
35
'- 0@*+
@
9
9
@*
;
9
h
,
35 / ?'(
-
'- 0
/ '
8$%
5
?D//
+ ,<& 5C !
35 +/@ &!
9
;
;
:
34
8
7
$
5
9
%;
:
34
34
5
34
;
34
!
' (
;
@
8
+
$
8
8
34
+&!
1E 8
8
#
35 +&!
2
+ /-'
34
+/@ &! @
0 ,5C
;
%
5
0
8
5
7
0
35
5'
8)/ ?'( "% )@
?
0
9
2
5
!
7
34
&
./
'
./
*---
*--0
37
4
34
!
!
.
$ 8
.
.
sysaltfiles
sys.master_files
Catalog view
syscacheobjects
sys.dm_exec_cached_plans
Dynamic management
view
sys.dm_exec_plan_attributes
sys.dm_exec_sql_text
Dynamic management
view
sys.dm_exec_cached_plan_dependent_objects Dynamic management
view
Dynamic management
view
syscharsets
sys.syscharsets
Compatibility view
sysconfigures
sys.configurations
Catalog view
syscurconfigs
sys.configurations
Catalog view
sysdatabases
sys.databases
Catalog view
sysdevices
sys.backup_devices
Catalog view
syslanguages
sys.syslanguages
Compatibility view
syslockinfo
sys.dm_tran_locks
Dynamic management
view
syslocks
sys.dm_tran_locks
Dynamic management
view
syslogins
sys.server_principals
Catalog view
sys.sql_logins
sysmessages
sys.messages
Catalog view
sysoledbusers
sys.linked_logins
Catalog view
sysopentapes
sys.dm_io_backup_tapes
Dynamic management
view
sysperfinfo
sys.dm_os_performance_counters
Dynamic management
view
sysprocesses
sys.dm_exec_connections
Dynamic management
view
sys.dm_exec_sessions
Dynamic management
view
sys.dm_exec_requests
38
Dynamic management
view
sysremotelogins sys.remote_logins
Catalog view
sysservers
Catalog view
$
0
sys.servers
E 8
. /(
!
FFF8
!-<
!-< !
FF0
7
34
;
4
!
;
$
34
.
8
./
!
%
./
*---
*--0
.
$ 8
.
.
fn_virtualfilestats
sys.dm_io_virtual_file_stats
Dynamic management view
syscolumns
sys.columns
Catalog view
syscomments
sys.sql_modules
Catalog view
sysconstraints
sys.check_constraints
Catalog view
sys.default_constraints
Catalog view
sys.key_constraints
Catalog view
sys.foreign_keys
Catalog view
sysdepends
sys.sql_dependencies
Catalog view
sysfilegroups
sys.filegroups
Catalog view
sysfiles
sys.database_files
Catalog view
sysforeignkeys
sys.foreign_key_columns
Catalog view
sysindexes
sys.indexes
Catalog view
sys.partitions
Catalog view
sys.allocation_units
Catalog view
sys.dm_db_partition_stats
Dynamic management view
sysindexkeys
sys.index_columns
Catalog view
sysmembers
sys.database_role_members
Catalog view
39
sysobjects
sys.objects
Catalog view
syspermissions
sys.database_permissions
Catalog view
sys.server_permissions
Catalog view
sys.database_permissions
Catalog view
sys.server_permissions
Catalog view
sysreferences
sys.foreign_keys
Catalog view
systypes
sys.types
Catalog view
sysusers
sys.database_principals
Catalog view
sysfulltextcatalogs
sys.fulltext_catalogs
Catalog view
sysprotects
$
0
E 8
. /(
!-< !
0
&4
FFF8
$
&
!-< !
!
9
!-< !
8
=
C
8
%
35
./
./ $
4
34
8
'
$M
A
A
./
S+
C
< ;
8
./
0T%
4
6
./
<
;
7
8
A
8
8
./
./
.
C
*--0
8
(
7 =
9
% (
2
./
35
34
./
FF0
$
7
'
FF0
./
./
< ;
40
9
0,
;
2
$8
5
L +M
D 8
5
/)
9
'
Compiled Plan
Executable Plan
Parse Tree
Cursor Parse Tree
Extended Stored Procedure
D 8
9 '
L 1M
Stored Procedure
Prepared statement
Ad hoc query
ReplProc (replication procedure)
Trigger
View
Default
User table
System table
Check
Rule
&
D
D
9
N;
<
9
$
9
% (
9
./
D 2
&
;
?C
< ;
?C
9
8
9
9
35
8
=
9
*
@
9
9
,*)
*
9
8
L 01M
$
0+ %
@/@
8
8
D((@J$ ; %
;
MJ+"
./
!
$
D
%
9
1 #@J@ 9 Ra
(
>J+D( !_ D((@J$ ; %
-
0
%
a
8
9
K
Ra
@
(
!-<
41
a
;
a
$%da
(
35
8
Vset showplan_all onB
+ ./
8
./
X7
9-
: 8
8
35
./ 7
00
'
Texto
XML
Comando
Executa
a Consulta?
Exibe o
plano em
modo
texto?
Sim
Exibe a
quantidade estimada de
linhas
(tuplas)?
Não
set showplan_text on
Não
set showplan_all on
Não
Não
Sim
Sim
Não
set statistics profile on
Sim
Sim
Sim
Sim
set showplan_xml on
Não
Sim
Sim
Não
set statistics xml on
Sim
Sim
Sim
Sim
$
00%
+.
8
8
4
/)
K
!-<
0*
8
Exibe o número de linhas corrente
?
35
./
./
*--0
@
#+1 (/7?O7// +?
?
JDZ[+ ./ @\@ D 7&7 &DJ7? @ 7 +?@\[+ &+ >!&
@
#+1 (/7?O7// +MM
-
0
%,
&4
(
/)
./
<
! "2 "
5
5
" 2
9
! "2 "
! "2 "
\" /
7
"
! "2 "
42
0U
34
9
9
-
: ;
;
9 =
9
?
;
!
!"#
;
9
;
9
!
<
>
@
A
*
*
$%#
-
;
B
+
A
%$%&'
. %*'
1
'%
%$%'%
&C1 $+D
&C1
&&
2 ')+*
$+&C ,+.'+*
&0%&C +.'
$ E72*'%*
!&#
#$
;
?
9
?
!&#
-
B
;
9
'
43
9
;
9
9 :;
;
<
'
.>
'
(
&1
?
;
9
;
9
.>
'
?
.!
9 :;
;
9
<
<
; <
9
(
. >
'
@
;
$
01 %
7
8
8
8
9
4
/)
4
+;
0K
35
A
;
&@ /7J@ i
@ i
35
\" /
&
@/@
MJ+"
e
-
0
0 + &4
%,
:.
*
L7J! ?7J_$UT%
L7J! ?7J_$UT%
@/@
i ;
R ;O
MJ+"
O
O ;
1 #@J@
O Ri
e
*--0
?
R 0*
&@ /7J@ i ;
&@ /7J@ i
@/@
MJ+"
./
O
O ;O
O
O;
L
/(
i
R
$i ;
O
%
$i
%
;E <M
&
O
!-<
8
!-< !
FF0
8
;
2
'
C
8
%
44
/)
8
34
$ 8
4
6
35
6
2
6
6
(
34
&
$8
!W%
8
4
< 35
8
9
5
5
'
A
5
7
4
<
9
% 7
35
'
34
A
7
2
>!& $
35
0Y
7
2 $
6
$
0)%
@
%
34
6
(
35
C
;
6
34
C
C
2
6
8
34
5
6
8
;
0T 00 0U
45
8
./ @
Nome da Coluna
name
Id
xtype
Tipo de Dados
sysname
int
char(2)
Descrição
Nome do objeto.
Identificador do objeto.
Tipo do objeto. Pode ser um dos seguintes valores:
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
FN = Scalar function
IF = Inlined table-function
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TF = Table function
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure
uid
crdate
type
smallint
datetime
char(2)
ID do usuário proprietário do objeto.
Data em que o objeto foi criado.
Tipo do objeto. Pode ser um dos seguintes valores:
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
FN = Scalar function
IF = Inlined table-function
K = PRIMARY KEY or UNIQUE constraint
L = Log
P = Stored procedure
R = Rule
RF = Replication filter stored procedure
S = System table
TF = Table function
TR = Trigger
U = User table
V = View
X = Extended stored procedure
$
03 %
!
46
D
id
Nome da
Coluna
first
indid
Tipo de Dados
Descrição
int
ID da tabela (para indid = 0 or 255). Caso contrário, ID da tabela ao qual o índice pertence.
Ponteiro para a primeira página ou para o nó Raíz.
ID do índice:
binary(6)
smallint
1 = Clustered index
>1 = Nonclustered
255 = Entrada para tabelas que tenham dados
texto ou imagem.
root
binary(6)
minlen
keycnt
dpages
smallint
smallint
int
rowmodctr
int
xmaxlen
maxirow
smallint
smallint
OrigFillFactor
tinyint
keys
varbinary(816)
name
sysname
rows
int
$
09
Para indid >= 1 e < 255, root é um ponteiro para
o nó raiz do índice. Para indid = 0 or indid = 255,
root é um ponteiro para a última página de dados.
Tamanho mínimo de uma.
Número de chaves.
Para indid = 0 ou indid = 1, dpages representa o
número de páginas de dados. Para indid=255, este
campo contém valor 0. Para outros casos, este valor representa o número de páginas de índices.
Total de linhas inseridas, excluídas ou atualizadas
desde a última vez que as estatísticas foram atualizadas.
Tamanho máximo de uma linha.
Tamanho máximo de uma linha referente a um nó
não folha.
Fillfactor utilizado quando o índice foi criado.
Pode ser útil quando se deseja re-criar o índice e
não se recorda do fillfactor utilizado quando o índice foi criado.
Lista com os IDs das colunas que compõem a chave do índice.
Nome da tabela (para indid = 0 or 255). Caso contrário, nome do índice.
Número de linhas da tabela (se indid = 0 and indid = 1). Para indid = 255, rows recebe valor 0.
8
8
@/@
J+1
MJ+" _ +!P@
P+ ? _ ?&@\@ +? &R &
1 #@J@ ?7" @Ra 7!/@,a7?&
-
0+
*
!
_(@Ra
Da7?&
? *
47
#$ %
4
?& &jR,
@/@
&(7>@
MJ+" _ +!P@
P+ ? _ ?&@\@ +? &R &
1 #@J@ ?7" @Ra 7!/@,a7?&
-
00
*
_(@Ra
Da7?&
? *
@8
@/@
?7" @ ]@_
MJ+" _ +!P@
P+ ? _ ?&@\@ +? &R &
1 #@J@ ?7" @Ra 7!/@,a7?&
-
01
?& &jR,
_(@Ra
Da7?&
*
A
?& &kR,
?
6 Conclusões
+
2
34
5
6
(
34
=
8
7
8
;
3
:
+ &!7
5
6
<
8
5
&
8
>!&
&!7
35
34
&!7 5
(
=
>!& ?
$
%
34
6
6
./
35
$ C
%
8
B
48
( 2
$
%
>!& &
&!7
+
C
8
,- 2
35 2
2
./
?
./
*--0
<
>!&
'(
+
,-
2
34
6
./
*--0 7 2
<
<
$
%
8
35
&
35
35
< 35
6
8
35
6 Bibliografia
[1] MONTEIRO, J. M.: An Architecture for Automated Index Tuning. V Workshop de Teses e Dissertações em Banco de Dados (WTBD), realizado em conjunto com o XXI Simpósio Brasileiro d Banco de Dados (SBBD). 2006.
[2] CHAUDHURI, S., DATAR, M., AND NARASAYYA, V.: Index Selection for
Databases: A Hardness Study and a Principled Heuristic Solution. IEEE Transactions on Knowledge and Data Engineering, 16 (11):1313–1323, 2004.
[3] COSTA, R. L. C., LIFSCHITZ, S., NORONHA, M., SALLES, M. V.:
Implementation of an Agent Architecture for Automated Index Tuning. ICDE
Workshops 2005.
[4] SALLES, M. V.: Criação Autônoma de Índices em Bancos de Dados. Dissertação de Mestrado, Departamento de Informática, Pontifícia Universidade
Católica do Rio de Janeiro (PUCRio), 2004.
[5] MORELLI, E. M. T.: Recriação Automática de Índices em um SGBD Relacional. Dissertação de Mestrado, Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro (PUCRio), 2006.
[6] LIFSCHITZ, S.; MILANÉS, A. Y. ; SALLES, M. A. V.. Estado da arte em auto-sintonia de sistemas de bancos de dados relacionais. Relatório técnico, Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro
(PUC-Rio), 2004.
49
[7] WEIKUM, G.; M¨ONKEBERG, A.; HASSE, C. ; ZABBACK, P.. Self-tuning
database technology and information services: from wishful thinking to viable
engineering. In: Proceedings of the International Conference on Very Large Databases (VLDB), p. 20–31, 2002.
[8] VIEIRA, M.; DURÃES, J.; MADEIRA, H. Especificação e Validação de Benchmarks de Confiabilidade para Sistemas Transacionais. IEEE Latin America
Transactions, Jun. 2005.
[9] KENDALL, E.A. KRISHNA, P.V.M. PATHAK, C.V. AND SURESH, C.B., An
Application Framework for Intelligent and Mobile Agent Systems, capítulo em
Implementing Applications Frameworks: Object Oriented Frameworks, Work,
ed. M. Fayad, D. C. Schmidt, R. Johnson, Wiley & Sons, 1999.
[10] SALLES, M. V., AND LIFSCHITZ, S.: Autonomic Index Management. In
Proceedings of the International Conference on Autonomic Computing (ICAC),
2005.
[11] CHAUDHURI, S., AND NARASAYYA, V.: Autoadmin “what-if” Index Analysis Utility. In Proceedings of the ACM SIGMOD International Conference on
Management of Data, pages 367–377, 1998.
[12] CHAUDHURI, S., AND WEIKUM, G.: Rethinking Database System Architecture: Towards a Self-tuning Risc-Style Database System. In Proceedings of
the International Conference on Very Large Databases (VLDB), pages 1–10,
2000.
[13] COSTA, R. L. C., LIFSCHITZ, S. AND SALLES, M. V.: Index Self-Tuning
with Agent-Based Databases. CLEI Electronic Journal, 6(1):22 PAGES, 2003.
[14] TPC: “TPC Benchmark – Revision 2.1.0”.
http://www.tpc.org>. Acesso em 05 de junho de 2007.
Disponível
em:
<
[15] MOMJIAM, B.: Postgresql – Introduction and Concepts. Addison-Wesley.
New York, 2001.
[16] STINSON, B.: Postgresql Essential Reference. New Riders Publishing,
Primeira Edição, 2001.
[17] GESCHWINDE, E. AND JUNGERSCHONING, H.: Postgresql Developer’s
Handbook. Sams Publishing, Segunda Edição, 2002.
[18] O Coletor de Estatísticas do Postgresql. Disponível em:
<http://www.javalinux.com.br/javalinux/pg74/monitoring-stats.html>. Visitado em
01/07/2007.
[19]
ORACLE
V$
View
List.
Disponível
em: <http://www.dbaoracle.com/menu_v$_views_list.htm>. Acesso em 05 de junho de 2007.
50
F*-G
!-<
j
'SS
!
F*,G?7L7 # @
'7
1
F**G /!@J
0
FF0
C
Sk 7
O
, <
' ,, 9 *--Y
&
E @/" 7 J J !
*--0
6
T
#7 ^ 7 E ]+J # # M E D&7J #7?
5 (
'
*--U
51
!
'
5 (
Download