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 (