Armazenamento de Dados e Indexação em PostgreSQL e MySQL

Tamanho: px
Começar a partir da página:

Download "Armazenamento de Dados e Indexação em PostgreSQL e MySQL"

Transcrição

1 Armazenamento de Dados e Indexação em PostgreSQL e MySQL Tiago Almeida André Machado de Dezembro, 2011

2 Conteúdo 1 PostgreSQL Armazenamento Armazenamento Físico das Bases de Dados Clustering Sistema de gestão do buffer Particionamento Indexação e Hashing Tipos de índice Índices multi-coluna Os índices e a ordenação Combinação de índices Índices únicos Indexação em expressões Índices parciais Classes de operadores MySQL Armazenamento Armazenamento Físico das Bases de Dados Sistema de gestão do buffer Particionamento Indexação e Hashing Estruturas de dados de indexação Tipos de índice Notas sobre indexação Hashing Estruturas temporariamente inconsistentes

3 Capítulo 1 PostgreSQL 1.1 Armazenamento Armazenamento Físico das Bases de Dados O PostgreSQL não implementa um sistema de ficheiros. Em vez disso, usufrui do sistema de ficheiros do Sistema Operativo para gerir as suas directorias e ficheiros. O Layout das directorias e ficheiros é explicado já na secção Layout Físico da Base de Dados Todos os dados necessários para um sistema de bases de dados fica guardada dentro da directoria desse sistema. Normalmente, denominada de PGDATA. Multiplos sistemas podem existir na mesma máquina. A directoria PGDATA contém várias subdirectorias e ficheiros de controlo, como se pode ver alguns na tabela 1-1, abaixo. Item PG_VERSION base global pg_clog pg_stat_tmp pg_tblspc pg_xlog Descrição Um ficheiro que contém a versão do PostgreSQL Subdirectoria que contém as subdirectorias de cada base de dados Subdirectoria que contém tabelas comuns aos sistema, tal como a "pg_database" Subdirectoria que contem informação relativa a transações Subdirectoria que contém ficheiros temporários para o subsistema de estatistica Subdirectoria que contém links para tablespaces Subdirectoria que contém ficheiros WAL (Write Ahead Log) 2

4 Para cada base de dados, existe uma subdirectoria na PGDATA/base, denominada através do seu OID na pg_database. Esta subdirectoria é o local, por omissão, para os ficheiros da base de dados. Cada tabela e cada índice são guardados em ficheiro diferentes. O respectivo FSM (Fre Space Map) é guardado num ficheiro com o mesmo nome que a tabela, com o sufixo "_fsm". O VM (Visibility Map) é feito da mesma maneira, mas o sufixo é "_vm". O VM é descrito na secção O "Initization Fork"de tabelas e índices pontuais é guardado com sufixo "_init". Será falado sobre isso na secção Tabela com colunas potencialmente grandes demais, terão uma tabela TOAST (ver secção ) associada. O conteúdo das tabelas e índices será discutido na secção Cada tablespace definido pelo utilizador tem um "atalho"dentro da directoria PGDATA/pg_tblspc, que dirige para directoria onde está a informação o tablespace. Tabelas e índices são guardados dentro dessa directoria. A função pg_relation_filepath() mostra o caminho completo (relativo à directoria PGDATA) de qualquer relação. Os ficheiros temporários são guardados dentro de "PGDATA/base/pgsql_tmp", ou dentro da subdirectoria "pgsql_tmp"da directoria de um tablespace TOAST - The Oversized-Attribute Storage Technique O PostgreSQL tem uma tamanho fixo por página (8 kb, normalmente) e não permite que os túplos se expandam para outro páginas. Então, não permite guardar valores muito grandes directamente. Para superar esta limitação, os dados são compridos ou divididos. Tudo isto de forma transparente ao utilizador. Nem todos os tipos são "TOAST-able". Isto porque há certos tipos que nunca vão produzir grandes valores (booleanos, por exemplo), logo não há necessidade de overhead. Para permitir TOAST, o tipo de dados deve ter uma representação do comprimento da variável (varlena), que é uma palavra de 32-bits, contendo o tamanho total do valor, em bytes. O TOAST usa dois bits da varlena para verificação, limitando o tamanho de qualquer valor em 1 GB. Estes dois bits são usados para definir o tipo e/ou estado do valor. Há quatro estratégias para guardar colunas em TOAST: 3

5 PLAIN Não permite compressão nem divisão. Os dados são guardados da mesma forma. É a única estratégia para "non-toast-able data" EXTENDED Primeiro comprime os dados e, se ainda não couber, divide-os em múltiplas linhas EXTERNAL Não permite compressão, apenas divisão em múltiplas linhas MAIN Permite compressão, mas não permite divisão. No entanto, apenas como último recurso, poderá haver a necessidade de dividir Cada tipo de dados (TOAST-able) especifíca uma estratégia a ter, por omissão, para cada coluna desse tipo de dados. Ainda assim, a estratégia pode ser alterada utilizado o comando "ALTER TABLE SET STORAGE". Para mais informação, visite "http://www.postgresql.org/docs/9.1/static/storagetoast.html" Free Space Map Todas as relações, excepto índices Hash, têm uma FSM para guardar informação sobre espaço livre na relação. O FSM é organizado como uma árvore de páginas FSM. As páginas FSM, no nível mais profundo (leafs), guarda o espaço livre em cada relação, usando um byte para representar cada página. Os níveis de cima servem para agregar a informação vinda de baixo Visibility Map Cada relação tem também um VM para guardar informação sobre quais páginas têm tuplos visíveis a todas as transações activas. O VM só guarda um bit por cada página. Um bit com valor 1 significa que todos os túplos da página são visíveis a todas as transações. O VM é conservativo de forma que, quando o bit estiver a 1, sabemos que a condição é verdadeira mas, quando está a 0, pode, ou não, ser verdade Initialization Fork Cada tabela definida como "unlogged", e respectivos índices, têm um IF (Initialization Fork). O Initialization Fork é um tabela vazia, ou índice vazio, do tipo apropriado. Quando acontece um "crash"e a tabela precisa de ser reiniciada, o Initialization Fork é copiado para o fork principal Layout das Páginas Todas as tabelas e índices são guardados como arrays de páginas de tamanho fixo (normalmente, 8 kb, como já havia sido referido). Numa tabela, todas 4

6 as páginas são equivalentes, ao nível lógico. Portanto, cada linha pode ser guardado em qualquer página. No que toca aos índices, a primeira página é usada como uma página que guarda informação de controlo. Tabela 1-2: Overral Page Layout Item PageHeaderData ItemIdData Free space Items Special space Descrição 24 bytes; Contém informação geral sobre a página, incluindo apontadores para espaços vazios Array de pares (offset,length) que apontam para os items em si; 4 bytes por item O espaço livre. Os apontadores para novos items são alocados no início deste espaço e os items em si no fim Os items em si Dados de especificação sobre os métodos de acesso dos índices Os primeiros 24 bytes de cada página consistem no cabeçalho da página. Guardam informação como a data da última alteração, o "offset"para o ínicio e fim do espaço livre, entre outros. Depois do cabeçalho, vem os identificadores dos items. Guardam o offset para o início do item, o seu comprimento em bytes e alguns bits que afectam a sua interpretação. Por último, vem a secção "especial", que pode conter tudo o que o método de acesso deseje escrever. Por exemplo, índices B-Tree guardam links para os filhos esquerdo e direito de uma determinada página. Tabelas básicas não usam esta secção. Para mais detalhes, visitar "http://www.postgresql.org/docs/9.1/static/storagepage-layout.html" Clustering Quando uma tabela é agrupada, é fisicamente reordenada, com base na informação do índice. Agrupamento de tabelas é uma operação pontual. Isto é, quando é feito um "update"a uma tabela, as mudanças não são agrupadas. Se se quiser, pode-se reagrupar periodicamente, bastando apenas correr o comando novamente. Durante uma operação de agrupamento, obtém-se acesso exclusivo, o que previne que qualquer outra operação seja efectuada na tabela, até o agrupamento terminar Sistema de gestão do buffer As versões anteriores à 8.0 usavam uma cache LRU (Least Recently Used) para guardar em memória as páginas mais recentes. O algoritmo URL não 5

7 tinha em consideração o número de vezes que uma cache em específico era acedida. Isto era mau, porque um scan muito grande poderia forçar a saída de páginas úteis. O novo algoritmo de caching usa quatro listas em separado para guardar informação das páginas visitadas mais recentemente e as páginas visitadas mais frequentemente e, dinamicamente, optimiza a substituição de páginas com base na carga de trabalho Particionamento Particionamento no PostgreSQL O PostgreSQ tem um mecanismo de particionamento que é bastante útil e oferece vários benefícios, tais como melhorar a performance das queries, melhores a performance de updates, dividir um bloco de dados muito grande em vários blocos pequenos, entre outros. O sistema de particionamento do PostgreSQL trabalha através de herança de tabelas. Cada partição deve ser criada como "filha"de apenas uma tabela "mãe". A tabela "mãe", normalmente, é uma tabela vazia; existe apenas para representar o conjunto de dados. Em PostgreSQL, existem as seguintes formas de particionamento: Particionamento por intervalos, definido através de intervalos de valores disjuntos para atributos chave da tabela a particionar; Particionamento por listagem, definido através duma listagem explícita de que valores duma chave da tabela pertencem a que partição; Como particionar Um utilizador pode definir uma tabela particionada da seguinte forma: 1. Criar uma tabela "mestre", da qual todas as partições vão herdar, não contendo quaisquer dados e sem restrições definidas (a não ser que o utilizador queira aplicar estas restrições igualmente a todas as partições); 2. Criar várias tabelas "filhas"(partições) que irão, todas elas, herdar da tabela mestre"; 3. Adicionar restrições para cada partição para definir os valores permitidos na chaves, assegurando que os intervalos abrangidos são disjuntos entre as várias partições; 4. Para cada partição, criar um índice na coluna chave, bem como quaisquer outros índices desejados; 5. Opcionalmente, definir "triggers"ou regras para que os dados inseridos na tabela mestre sejam "redirecionados"para a partição apropriada; 6

8 6. Assegurar que o parâmetro de configuração "constraint_exclusion"não está desligado no postgresql.conf. Se estiver, as queries não vão ser optimizadas como desejado Gerir partições Normalmente, não se pretende que as partições criados na definição da tabela se mantenham estáticas. É bastante comum querer apagar partições antigas e, periodicamente, adicionar novas. A maneira mais simpes para apagar dados antigos consiste em apagar a tabela da partição que já não é necessária: DROP TABLE measurement_y2006m02; Esta operação permite apagar milhões de registos muito rápidamente, visto que não é preciso apagar cada registo individualmente. Outra solução, que muitas vezes é preferível, é remover a partição da tabela particionada mas continuar a ter acesso à mesma e aos seus dados: ALTER TABLE measurement_y2006m02 NO INHERIT measurement; Isto permite fazer operações futuras nos dados antes de os apagar Particionamento e exclusão de partições Exclusão de Restrições é uma optimização de queries que melhora a performance em tabelas particionadas definidas da forma descrita acima. Numa query com a cláusula "WHERE", com "constraint_exclusion"activada, o planeador vai examinar as restrições de cada partição e tentar provar que a partição não precisa ser "scaneada"porque não iria conter nenhuma linha que correspondesse com a cláusula WHERE. Quando o planeador consegue comprovar isto, exclui a partição do plano da query. Mas a optimização de queries não será explorada neste relatório Métodos de particionamento alternativo Uma maneira diferente de "redirecionar"inserções para a partição apropriada consiste em definir regras, em vez de triggers, na tabela mestre. Por exemplo: CREATE RULE measurement_insert_y2006m02 AS ON INSERT TO measurement WHERE ( logdate >= DATE AND logdate < DATE ) DO INSTEAD INSERT INTO measurement_y2006m02 VALUES (NEW.*); 7

9 Atenção que a operação "COPY"ignora estas regras. Se quiser usar a operação "COPY"para inserir dados, é fulcral que se copie os dados para a partição correcta, em vez de copiar para a tabela mestre. A operação "COPY", no entanto, dispara triggers, logo se se prentender usá-la, usar triggers é uma aproximação aceitável Avisos Não existe uma maneira automática de verificar que todas as restrições são disjuntas. Por exemplo, temos uma partição <pt1> com a restrição "CHECK ( outletid BETWEEN 100 AND 200 )"e uma partição <pt2> com a restrição "CHECK ( outletid BETWEEN 200 AND 300 )". Não é óbvio a que partição pertence a chave com valor 200. E não há forma de verificar isto. Os esquemas mostrados aqui partem do principio que a coluna chave de uma partição nunca muda ou, pelo menos, não muda o suficiente de forma a obrigar a mudar a linhar para outra partição. Um UPDATE que tente fazer isso vai falhar por causa das restrições. Uma boa solução seria implementar triggers para UPDATE. 8

10 1.2 Indexação e Hashing Tipos de índice Há quatro tipos de índice suportados pelo PostgreSQL. ELes são: B-Tree, Hash, GiST e GIN. Cada tipo usa um algoritmo diferente que se adequa melhor a determinado tipo de query. Por omissão, os índices criados são do tipo B-Tree. Internamente, o PostgreSQL também usa bitmaps para operações binárias (como AND e OR). Contudo, não é possível o utilizador definir índices do tipo bitmap Índices B-Tree Os índices do tipo B-Tree suportam igualdades e ordenação. O "query planner"do PostgreSQL usará (ou considerará usar) B-Tree s sempre que uma coluna indexada esteja envolvida numa comparação de um dos tipos <, <=, =, >= e >. Os índices B-Tree também funcionam para as combinações destas várias operações, como "IN"e "BETWEEN". As condições "IS NULL"e "IS NOT NULL", usadas em colunas indexadas, também podem ser usados com B- Tree s. Índices B-Tree também podem ser usados para obter dados ordenados. Nem sempre é mais rápido que um "scan & sort"puro, mas pode ser útil Índices Hash Os índices Hash só suportam igualdade. O "query planner"só considerará usar um índice Hash quando as colunas indexadas estejam envolvidas numa comparação de igualdade (=). Além disso, ao contrário dos índices B-Tree, os índices Hash não actualizam o WAL, o que obriga a que os índices sejam "refeitos"depois de um crash. Nota: WAL (Write Ahead Log) é uma sistema de logs no qual são mantidas todas as alterações feitas à base de dados, a fim de conseguir recuperar o estado da base de dados antes de ocorrer o crash Índices GiST GiST não são índices básicos, mas sim uma estrutra onde se podem ter várias estratégias diferentes de Indexação. Os tipos de query para os quais são usados os índices GiST dependem da estratégia de indexação que se está a adoptar. Por exemplo, a versão Standard do PostgreSQL vem com índices GiST para dados geométricos a duas dimensões, que suportam as operações «, &<, &>,», «, &<, = e &&. 9

11 Os índices GiST também podem ser usados para optimização de queries por "nearest-neighbor". Exemplo: SELECT * FROM places ORDER BY location <-> point (101,456) LIMIT 10;" Esta query procura os 10 (dez) "places"mais perto de um determinado "point" Índices GIN Os índices GIN são índices invertidos que lidam (ou podem lidar) com valores com mais do que uma chave. Tal como os GiST, os GIN permitem diferentes estratégias e os operadores com os quais são usados os GIN também depende da estratégia que esteja a ser usada. Para exemplificar, a versão Standard do PostgreSQL vem com índices GIN para lidar com arrays unidimensionais, que suportam os = e && GiST vs. GIN Estes índices podem ser usados para acelerar pesquisas em texto. Não é estritamente necessário, mas é útil. GiST > Pode, por vezes, apresentar resultados errados (false matches), o que obriga a que o PostgreSQL faça um verificação para eliminar as linhas onde isto acontece. Isto causa uma degradação na performance porque obriga a fazer acesso ao disco (fetch) de registos que, na verdade, são "false matches". GIN > O mesmo não acontece (tão frequentemente) no uso de índices GIN, mas a sua performance depende do número de "unique words". Uma procura por um índice GIN é 3 (três) vezes mais rápida que uma procura por um índice GiST. No entanto, um índice GIN demora o triplo do tempo a ser criado, em comparação ao índice GiST. Assim como na criação, o update de um índice GIN também é mais lento. Para terminar, os índices GIN são cerca de 3 vezes mais maiores, em termos de memória, em comparação aos índices GiST Índices multi-coluna Um índice pode ser definido em mais do que uma coluna. Até agora, apenas os índices B-Tree, GiST e GIN suportam mais do que uma coluna e estão limitados a 32 colunas (parametrizável na compilação do PostgreSQL). Não, os índices Hash não suportam mais do que uma coluna. Exemplo: 10

12 CREATE INDEX <index\_name> ON <table_name> USING BTREE(<at1\_name>, <at2\_name>); No entanto, índices multi-coluna têm as suas limitações e devem ser usados com moderação. Na maioria dos casos, um índice por coluna é suficiente e poupa espaço e tempo. Índices com mais do que três colunas não são muito úteis, a menos que o uso da tabela seja muito especializado Os índices e a ordenação Além de encontrar as linhas que respondem a uma query, os índices também são capazes de as retornar numa determinada ordem. Isto permite que uma especificação "ORDER BY"numa query possa ser realizada sem ser necessária fazer um passo só para ordenação. Dos tipos falados previamente, apenas os índices B-Tree permite ordenação. A ordenação feita pelos GiST e GIN depende da estratégia dos mesmos. Por omissão, as índices B-Tree guardam as entradas numa ordem ascendente. Assim, uma pesquisa de um índice duma determinada coluna x produz um output equivalente a "ORDER BY x", ou "ORDER BY x ASC", ou até mesmo "ORDER BY x ASC NULLS LAST". Temos também as especificações "DESC"e "NULLS FIRST" Combinação de índices Um índice multi-coluna só consegue processar queries nas quais, na clausula WHERE, as operações às suas colunas estão ligadas por AND. Imaginando um índice (x,y), não podemos usar directamente o índice para processar a query "WHERE x=11 OR y=23". O PostgreSQL goza de um mecanismo que é a combinação de índices. Se por exemplo, tivermos um índice na coluna x e um índice na coluna y e fizermos a query "SELECT * FROM <table_name> WHERE x=11 AND y=23", o PostgreSQL usa, separadamente, o índice em x, para buscar as linhas que passam a condição x=11, e o índice em y, par abuscar as linhas que passam a condição y=23. Para cada resultado, o PostgreSQL prepara um bitmap que diz quais as linhas que respondem à condição. Depois, é aplicar o AND (ou o OR, se for o caso) a cada elemento do bitmap. É, no entanto, de salientar que esta combinação de índices estraga a ordenação dos mesmos, dado que os bitmaps estão ordenados de acordo com a ordenação física (em disco) dos dados. Se um "ORDER BY"for requerido na query, é preciso fazê-lo no final Índices únicos Os índices podem forçar a unicidade do valor de uma coluna, ou a unicidade do valor combinado de mais de uma coluna. 11

13 Actualmente, apenas os índices B-Tree podem ser declarados como únicos. Quando é declarado um índice sobre uma determinada coluna, não há repetição de valores na mesma. Os valores NULL não são considerados únicos, pelo que pode haver mais que um. Um índice multi-coluna único impede que as colunas cobertas pelo índice tenham o mesmo valor em múltiplas linhas. O PostgreSQL já cria índices únicos automáticamente quando são definidos "unique constraints"ou chaves primárias. É a unicidade do índice que assegura a unicidade da chave primária ou que satisfaz a "constraint" Indexação em expressões É possível criar índices como expressões das colunas. Por exemplo, se quisermos fazer testes "case-insensitive", normalmente passamos tudo para lowercase. Em vez disso, podemos criar um índice assim: CREATE INDEX test1\_lower\_col1\_idx ON test1 (lower(col1)); Outro exemplo. Se quisermos fazer uma query SELECT * FROM people WHERE (first\_name last\_name) = John Smith ; então vale a pena criar um índice que faça isto por nós. Exemplo: CREATE INDEX people\_names ON people ((first\_name last\_name)); Assim, basta-nos fazer a query SELECT * FROM people WHERE indexed\_expression = John Smith Índices parciais Um índice parcial é um índice que é apenas mantido para um subconjunto de uma tabela. Por exemplo, é possível definir um índice parcial através de um predicado de selecção na criação do mesmo. Assim, estes índices só manterão entradas que satisfaçam a condição. Temos a tabela "tests", criada da seguinte forma: CREATE TABLE tests ( subject text, target text, success boolean,... );" 12

14 Pretendemos que, para um dado subject e target, só exista uma entrada com sucesso (isto é, success = true). Criamos um índice com da seguinte forma: CREATE UNIQUE INDEX tests\_success\_constraint ON tests (subject, target) WHERE success; Neste caso em particular, é bastante útil quando temos poucas entradas com sucesso e muitas sem sucesso. Além de unicidade, também podemos criar índices parciais para excluir valores que não nos interessem, apenas adicionando a cláusula "WHERE <condicao\_desejada>". Exemplo: "CREATE INDEX rich\_accounts ON accounts WHERE balance > 1000" Classes de operadores No PostgreSQL é possível definir uma classe de operadores para uma determinada coluna do índice. Esta classe de operadores define que operadores podem ser utilizados naquela coluna do índice. É claro que os tipos de dados já têm um grupo de operadores associados por omissão. A grande utilidade desta funcionalidade baseia-se na possibilidade de definir operadores para tipos de dados complexos, cujos operadores por omissão podem não ser adequados. Uma classe de operadores é um subconjunto duma estrutura denominada de família de operadores, a qual serve para definir classes de operadores de tipos de dados semelhantes, permitindo a inter-utilização desdes tipos nos índices e consultas sobre os mesmos. 13

15 Capítulo 2 MySQL 2.1 Armazenamento O MySQL suporta vários motores de armazenamento (storage engines), que servem de suporte para diferentes tipos de tabelas. Existem dois tipos de storage engines, que são: Transacionais Não-Transacionais Ao longo do relatório vamo-nos focar no storage engine InnoDB, mas existem mais: MyISAM motor de armazenamento por defeito do MySQL, e consequente o mais utilizado. InnoDB motor transacional (compatível com ACID), assim possui commit, rollback e recuperação de falhas. Memory Os dados são todos guardados em RAM, possuindo um acesso extremamente rápido. Merge Útil para bases de dados bastante grandes, pois possibilita juntar várias tabelas de MyISAM num único objecto. Apenas para citar alguns Armazenamento Físico das Bases de Dados O InnoDB armazena toda a sua informação (tabelas, índices...) num tablespace, que por defeito apenas existe um para guardar toda a informação relativa a todas as bases de dados. O tablespace consiste numa base de dados de páginas onde cada página tem 16KB de tamanho. As páginas estão 14

16 organizadas em extents com 1MB de tamanho (64 páginas consecutivas). Os ficheiros que estão contidos no tablespace são denominados de segments. Desde que o InnoDB utiliza uma organização baseada em clustered indexes, as páginas que são folha do índice contêm a informação actual do record. Os índices secundários são construídos nas páginas dos clustered indexes. Uma página tem a seguinte estrutura: Fill Header, conté a informação sobre a directoria da página dentro do segmento Page Header, contém meta informação acerca da própria página Infimum and Supremum records User Records, contém os registos inseridos pelos utilizadores. Free Space, espaço livre em cada página como o próprio nome diz Page Directory, parte da página que tem um número variável de apontadores para os records. Por vezes estes apontadores são chamados de "slots". O InnoDB não tem um slots para cada record na página, pois em vez disso numa página inteira existe um slot para cada seis records. Fill Trailer,esta secção da página contém a checksum da informação da página, para usar no caso de ter que verificar erros no conteúdo da mesma. Visto que os record no InnoDB podem ter tamanho variável, podemos dizer é usado slotted pages para implementar este tipo de registos Tuplos Tuplos são as linhas de uma tabela onde estão os dados, são guardados em páginas de um tablespace. O tamanho máximo que cada cada tuplo pode ter é de aproximadamente metade de uma página, ou seja, 8000 bytes, não contando com objectos variáveis (VARBINARY, VARCHAR, BLOB e TEXT). Uma curiosidade é que para colunas LONGBLOB e LONGTEXT o tamanho tem que ser inferior a 4GB, e o tamanho de todo o tuplo tem de ser inferior 4GB. Outro aspecto é que se o tamanho de um tuplo for inferior a metade de uma página, então esse tuplo é guardado todo numa só página. Se assim não for, as colunas que forem variáveis são divididas por várias páginas até o tuplo caber na metade de uma página (overflow-pages). 15

17 2.1.2 Sistema de gestão do buffer O InnoDB possui o seu próprio buffer, para guardar a informação e os índices na memória, denominado buffer pool. Este buffer funciona como uma lista, usando o algoritmo LRU (least recently used), mas com uma pequena variante utiliza o midpoint insertion strategy que divide a lista em duas sublistas: À cabeça da lista, uma sublista de blocos que foram acedidos recentemente (denominados "young ). Na cauda da lista, uma sublista com os blocos que foram menos acedidos recentemente. Com isto, ficam na primeira sublista os blocos que são constantemente usados por queries e na segunda sublista ficam os blocos menos usados e com maior probabilidade de serem removidos. Algoritmo LRU do InnoDB em detalhe: 3/8 do buffer pool é dedicado à segunda sublista, ou seja, dos blocos menos usados. O centro da lista marca o ponto onde a cauda da sublista dos blocos mais usados coincide com a cabeça da sublista dos blocos menos usados. Quando o InnoDB lê um bloco para o buffer, esse bloco é inserido no ponto médio (cabeça da sublista dos blocos menos usados) Ao fazer um acesso a um bloco da sublista dos blocos menos usados, esse mesmo bloco é movido para a cabeça do buffer pool, ou seja, para a cabeça da sublista dos blocos mais recentemente usados. Conforme forem feitas operações na base de dados, os blocos que não são acedidos são movidos para a cauda da respectiva sublista. Eventualmente, um bloco (da sublista dos menos recentemente usados) que se mantenha inutilizado por um largo período de tempo, é descartado. Através das instruções Insert e Delete o buffer pool guarda os dados alterados para que a escrita no disco seja bastante mais rápida Particionamento No MySQL existem motores de armazenamento que não suportam o particionamento, mas o motor que estamos a estudar (InnoDB) suporta. A partição de tabelas tem apenas a função de optimizar as querys, e os tipos de partição são: Range (Intervalo) - secção

18 List (Lista) - secção Hash (Hash) - secção Key (Chave) - secção Columns (Colunas) - secção Subpartitions (Sub partições) - secção Iremos usar a seguinte tabela como exemplo, para explicar cada tipo de partição. CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT , separated DATE NOT NULL DEFAULT , job_code INT NOT NULL, store_id INT NOT NULL ); Partição por intervalo Permite criar várias partições que vão conter valores que estão dentro de um intervalo, através do comando VALUES LESS THAN para especificar esses mesmos valores, que não se sobrepõem. Exemplo: PARTITION BY RANGE ( store\_id ) ( PARTITION p0 VALUES IN (1, 4, 7, 10), PARTITION p1 VALUES IN (2, 5, 8, 11), PARTITION p2 VALUES IN (3, 9, 14, 17), PARTITION p3 VALUES IN (6, 12, 13, 15, 18) ); Partição em lista Método bastante parecido ao Range, com a diferença de neste modo se poder definir uma lista de valores específicos que se pretende em cada partição. Exemplo: PARTITION BY LIST(store\_id) ( PARTITION pnorth VALUES IN (3,5,6,9,17), PARTITION peast VALUES IN (1,2,10,11,19,20), PARTITION pwest VALUES IN (4,12,13,14,18), PARTITION pcentral VALUES IN (7,8,15,16) ); 17

19 Partição em Hash Neste caso temos de escolher o nome do campo no qual queremos que seja aplicada a função de hashing e o número de partições. Exemplo: PARTITION BY HASH(store_id) PARTITIONS 4; Partição em chave O particionamento é feito através da chave primária, no caso de estar definida, se não usa o atributo UNIQUE da tabela se estiver definido como NOT NULL. Exemplo: PARTITION BY KEY() PARTITIONS 2; Partição em colunas Variantes das partições Range e List: Range Column (Colunas por intervalos) Método de partição semelhante ao Range, com as seguintes diferenças: Não aceita expressões, só nomes de colunas Aceita uma lista de uma ou mais colunas É baseado em comparações entre tuplos em vez comparações entre valores escalares. Não está restrito a colunas de inteiros, podendo-se usar colunas de strings, DATE e DATETIME. Exemplo: PARTITION BY RANGE COLUMNS(a,d,c) ( PARTITION p0 VALUES LESS THAN (5,10, ggg ), PARTITION p1 VALUES LESS THAN (10,20, mmmm ), PARTITION p2 VALUES LESS THAN (15,30, sss ), PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE) ); List Column (Colunas por intervalos) Método de partição semelhante ao List, as seguintes diferenças: Aceita o uso de múltiplas colunas como chave. 18

20 Não está restrito a colunas de inteiros, podendo-se usar colunas de strings, DATE e DATETIME. Exemplo: PARTITION BY LIST COLUMNS(city) ( PARTITION pregion_1 VALUES IN( Oskarshamn, Högsby, Mönsterås ), PARTITION pregion_2 VALUES IN( Vimmerby, Hultsfred, Västervik ), PARTITION pregion_3 VALUES IN( Nässjö, Eksjö, Vetlanda ), PARTITION pregion_4 VALUES IN( Uppvidinge, Alvesta, Växjo ) ); Partição em subpartições Este método não é mais do que voltar a particionar uma partição que seja feita anteriormente, ou seja, ao fazer uma partição de qualquer tipo (List, Range, Key...) pode-se voltar a particionar usando o subpartition. Exemplo: PARTITION BY RANGE( YEAR(purchased) ) SUBPARTITION BY HASH( TO_DAYS(purchased) ) SUBPARTITIONS 2 ( PARTITION p0 VALUES LESS THAN (1990), PARTITION p1 VALUES LESS THAN (2000), PARTITION p2 VALUES LESS THAN MAXVALUE ); Vantagens do uso de partições As vantagens do uso de partições assentam essencialmente em 3 aspectos: Armazenar mais dados numa determinada tabela. Remoção e inserção facilitada, bastando remover/inserir a(s) partição(ões). Otimização nas consultas à base de dados, podendo-se fazer os acessos somente às partições certas, excluindo dados que sejam desnecessários. 19

PostgreSQL Performance

PostgreSQL Performance PostgreSQL Performance André Restivo Faculdade de Engenharia da Universidade do Porto February 24, 2012 André Restivo (FEUP) PostgreSQL Performance February 24, 2012 1 / 45 Sumário 1 Armazenamento 2 Índices

Leia mais

Armazenamento e Estruturas de Indexação

Armazenamento e Estruturas de Indexação Departamento de Informática Data: 3 de Dezembro de 2011 Grupo: 16 Armazenamento e Estruturas de Indexação Trabalho Final Sistemas de Base de Dados João Barbosa Nº38060 João Santos Nº35104 Tânia Leitão

Leia mais

Armazenamento e Estruturas de Indexação em Oracle, MySQL e PostgreSQL. Sistemas de Base Dados (2011-2012)

Armazenamento e Estruturas de Indexação em Oracle, MySQL e PostgreSQL. Sistemas de Base Dados (2011-2012) Armazenamento e Estruturas de Indexação em Oracle, MySQL e PostgreSQL Sistemas de Base Dados (2011-2012) text Grupo: G03 37900 Ricardo António de Oliveira Torres 37899 Jaquilino Lopes Silva 36812 Fernando

Leia mais

DBMS%Performance% Carlos%Soares% (baseado%em%materiais%gen8lmente%cedidos% por%andré%res8vo,%joão%correia%lopes%e%do% livro%ramakrishnan%&%gehrke)% %

DBMS%Performance% Carlos%Soares% (baseado%em%materiais%gen8lmente%cedidos% por%andré%res8vo,%joão%correia%lopes%e%do% livro%ramakrishnan%&%gehrke)% % DBMS%Performance% Carlos%Soares% (baseado%em%materiais%gen8lmente%cedidos% por%andré%res8vo,%joão%correia%lopes%e%do% livro%ramakrishnan%&%gehrke)% % Plano% Contexto% Índices% Carga%da%base%de%dados%%

Leia mais

Administração e Optimização de BDs

Administração e Optimização de BDs Departamento de Engenharia Informática 2010/2011 Administração e Optimização de BDs Mini-Projecto 1 2º semestre A resolução deve ser claramente identificada com o número de grupo e entregue sob a forma

Leia mais

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

Consistem num conjunto de apontadores para instâncias especificas de cada relação. Mecanismo usado para mais fácil e rapidamente aceder à informação existente numa base de dados. Bases de Dados de elevadas dimensões. Consistem num conjunto de apontadores para instâncias especificas de

Leia mais

Relatório de análise do Sistema de Gestão de Base de Dados

Relatório de análise do Sistema de Gestão de Base de Dados Departamento de Informática Relatório de análise do Sistema de Gestão de Base de Dados G02 Mestrado em Engenharia Informática Sistemas de Base de Dados - 2010/2011 André Simões ( n o 34920 ) Miguel Alves

Leia mais

Relatório do Trabalho de Sistemas de Bases de Dados. Dezembro 2011 GRUPO G11 NUNO GOMES (36720) RICARDO MESTRE (35066) ANTÓNIO MOTA (33801)

Relatório do Trabalho de Sistemas de Bases de Dados. Dezembro 2011 GRUPO G11 NUNO GOMES (36720) RICARDO MESTRE (35066) ANTÓNIO MOTA (33801) DEPARTAMENTO DE INFORMÁTICA Mestrado em Engenharia Informática ARMAZENAMENTO E ESTRUTURAS DE INDEXAÇÃO Relatório do Trabalho de Sistemas de Bases de Dados Dezembro 2011 GRUPO G11 NUNO GOMES (36720) RICARDO

Leia mais

Análise ao PostgreSQL Sistemas de Bases de dados

Análise ao PostgreSQL Sistemas de Bases de dados 1 Análise ao PostgreSQL Sistemas de Bases de dados 31/05/2014 Grupo 23 composto por: Filipa Ferreira (Nº 41737) Luís Antunes (Nº 41809) Miguel Aniceto (Nº 41805) 2 Índice Introdução... 4 Introdução Histórica...

Leia mais

RANGE-HASH e RANGE-LIST

RANGE-HASH e RANGE-LIST RANGE-HASH e RANGE-LIST O COMPOSITE PARTITION é um método de particionamento composto, unindo os três métodos discutidos anteriormente. Como os métodos Range, Hash e List Partition. Existem dois tipos

Leia mais

ADMINISTRAÇÃO DE BANCO DE DADOS

ADMINISTRAÇÃO DE BANCO DE DADOS ADMINISTRAÇÃO DE BANCO DE DADOS ARTEFATO 02 AT02 Diversos I 1 Indice ESQUEMAS NO BANCO DE DADOS... 3 CRIANDO SCHEMA... 3 CRIANDO TABELA EM DETERMINADO ESQUEMA... 4 NOÇÕES BÁSICAS SOBRE CRIAÇÃO E MODIFICAÇÃO

Leia mais

UFCD 787. Administração de base de dados. Elsa Marisa S. Almeida

UFCD 787. Administração de base de dados. Elsa Marisa S. Almeida UFCD 787 Administração de base de dados Elsa Marisa S. Almeida 1 Objectivos Replicação de base de dados Gestão de transacções Cópias de segurança Importação e exportação de dados Elsa Marisa S. Almeida

Leia mais

Sistemas de Base de Dados 2010/11 GRUPO 10 ANDRÉ MOURÃO Nº 35008 EDUARDO COSTA Nº 355049 RICARDO MARQUES Nº 35048

Sistemas de Base de Dados 2010/11 GRUPO 10 ANDRÉ MOURÃO Nº 35008 EDUARDO COSTA Nº 355049 RICARDO MARQUES Nº 35048 DEPARTAMENTO DE INFORMÁTICA TRABALHO FINAL POSTGRESQL Sistemas de Base de Dados 2010/11 Mestrado em Engenharia Informática GRUPO 10 ANDRÉ MOURÃO Nº 35008 EDUARDO COSTA Nº 355049 RICARDO MARQUES Nº 35048

Leia mais

Banco de Dados I 2007. Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

Banco de Dados I 2007. Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli Banco de Dados I 2007 Módulo V: Indexação em Banco de Dados (Aulas 4) Clodis Boscarioli Agenda: Indexação em SQL; Vantagens e Custo dos Índices; Indexação no PostgreSQL; Dicas Práticas. Índice em SQL Sintaxe:

Leia mais

Bases de Dados. Parte IX: Organização Física dos Dados

Bases de Dados. Parte IX: Organização Física dos Dados Bases de Dados Parte IX Organização Física dos Dados Unidades de Medida da Informação A unidade fundamental é o byte. byte corresponde a 8 bits e cada bit permite representar ou um 0 ou um. Kilobyte (Kbyte

Leia mais

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Faculdade Pitágoras Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL A linguagem SQL é responsável por garantir um bom nível

Leia mais

Comandos de Manipulação

Comandos de Manipulação SQL - Avançado Inserção de dados; Atualização de dados; Remoção de dados; Projeção; Seleção; Junções; Operadores: aritméticos, de comparação,de agregação e lógicos; Outros comandos relacionados. SQL SQL

Leia mais

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza PHP e Banco de Dados progweb2@thiagomiranda.net Conteúdos Os materiais de aula, apostilas e outras informações estarão disponíveis em: www.thiagomiranda.net PHP e Banco de Dados É praticamente impossível

Leia mais

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados SQL Structured Query Language Uma das mais importantes linguagens relacionais (se não a mais importante) Exemplos de SGBD que utilizam SQL Oracle Informix Ingress SQL

Leia mais

Regras de Integridade. Profa. Késsia Marchi

Regras de Integridade. Profa. Késsia Marchi Regras de Integridade Restrições de Integridade Integridade refere-se a precisão ou correção de dados em um banco de dados; Restrição refere-se a impor uma condição para qualquer atualização. Antes de

Leia mais

SQL (Structured Query Language)

SQL (Structured Query Language) (Structured Query Language) I DDL (Definição de Esquemas Relacionais)... 2 I.2 Domínios... 2 I.3 Criação de Tabelas... 2 I.4 Triggers... 4 II DML Linguagem para manipulação de dados... 5 II.2 Comando SELECT...

Leia mais

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL Faculdade Pitágoras Curso Superior de Tecnologia: Banco de Dados Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL A linguagem SQL é responsável por garantir um bom nível de independência do

Leia mais

Sistemas de Bases De dados

Sistemas de Bases De dados Sistemas de Bases De dados Professor José Júlio Alferes Relatório desenvolvido pelo G05: António Miguel Guiomar Nº 23354 André Filipe Fidalgo Nº 23950 Bruno Filipe Faustino Nº 23969 2 Índice Capítulo 1

Leia mais

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Introdução à Banco de Dados. Nathalia Sautchuk Patrício Introdução à Banco de Dados Nathalia Sautchuk Patrício Histórico Início da computação: dados guardados em arquivos de texto Problemas nesse modelo: redundância não-controlada de dados aplicações devem

Leia mais

INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de Dados

INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de Dados Número: Nome: 1 -------------------------------------------------------------------------------------------------------------- INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de Dados Exame

Leia mais

SQL Structured Query Language

SQL Structured Query Language Janai Maciel SQL Structured Query Language (Banco de Dados) Conceitos de Linguagens de Programação 2013.2 Structured Query Language ( Linguagem de Consulta Estruturada ) Conceito: É a linguagem de pesquisa

Leia mais

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003 Bases de Dados Introdução à linguagem SQL História Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R Renomeada para SQL (Structured Query Language) Standards ISO e ANSI SQL-86, SQL-89,

Leia mais

Programação SQL. Introdução

Programação SQL. Introdução Introdução Principais estruturas duma Base de Dados: Uma BD relacional é constituída por diversas estruturas (ou objectos ) de informação. Podemos destacar: Database: designa a própria BD; Table/Tabela:

Leia mais

Unidade 5 Armazenamento e Indexação

Unidade 5 Armazenamento e Indexação Unidade 5 Armazenamento e Indexação Engenharia de Computação / Engenharia de Produção Banco de Dados Prof. Maria das Graças da Silva Teixeira Material base: Banco de Dados, 2009.2, prof. Otacílio José

Leia mais

Núcleo de Pós Graduação Pitágoras

Núcleo de Pós Graduação Pitágoras Núcleo de Pós Graduação Pitágoras Professor: Fernando Zaidan Disciplina: Modelagem e Projeto de Banco de Dados Especialização em Tecnologia da Informação - Ênfases Março- 2009 1 Modelo Físico Introdução

Leia mais

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita: SQL Tópicos Especiais Modelagem de Dados Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Mestrado Profissional em Ensino de Ciências

Leia mais

Exemplos de Vistas SQL. Tipos em SQL. Linguagem de Definição de Dados (DDL) CREATE VIEW todososclientes As

Exemplos de Vistas SQL. Tipos em SQL. Linguagem de Definição de Dados (DDL) CREATE VIEW todososclientes As Exemplos de Vistas SQL Considere-se a vista (com o nome todososconsumidores) contento os nomes das agências e seus clientes CREATE VIEW todososclientes As Π nomebalcao,nomecliente (temconta conta) Π nomebalcao,nomecliente

Leia mais

Tarefa Orientada 19 Triggers

Tarefa Orientada 19 Triggers Tarefa Orientada 19 Triggers Objectivos: Criar triggers AFTER Criar triggers INSTEAD OF Exemplos de utilização Os triggers são um tipo especial de procedimento que são invocados, ou activados, de forma

Leia mais

Linguagem de Consulta Estruturada SQL- DML

Linguagem de Consulta Estruturada SQL- DML Linguagem de Consulta Estruturada SQL- DML INTRODUÇÃO A SQL - Structured Query Language, foi desenvolvido pela IBM em meados dos anos 70 como uma linguagem de manipulação de dados (DML - Data Manipulation

Leia mais

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas. MySQL 101 Recapitulando Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas. As bases de dados são úteis quando necessitamos

Leia mais

SQL. Prof. Márcio Bueno. {bd2tarde,bd2noite}@marciobueno.com

SQL. Prof. Márcio Bueno. {bd2tarde,bd2noite}@marciobueno.com SQL Prof. Márcio Bueno {bd2tarde,bd2noite}@marciobueno.com Material dos professores Ana Carolina Salgado, Fernando Foncesa e Valéria Times (CIn/UFPE) SQL SQL - Structured Query Language Linguagem de Consulta

Leia mais

Bases de Dados 2005/2006. Aula 5

Bases de Dados 2005/2006. Aula 5 Bases de Dados 2005/2006 Aula 5 Sumário -1. (T.P.C.) Indique diferenças entre uma tabela e uma relação. 0. A base de dados Projecto 1. SQL Join (variantes) a. Cross Join b. Equi-Join c. Natural Join d.

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo Departamento de Engenharia Informática 2014/2015 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Introdução à Engenharia da Computação. Banco de Dados Professor Machado Introdução à Engenharia da Computação Banco de Dados Professor Machado 1 Sistemas isolados Produção Vendas Compras Banco de Dados Produtos... Banco de Dados Produtos... Banco de Dados Produtos... Desvantagens:

Leia mais

Histórico de revisões

Histórico de revisões Apostila 3 Histórico de revisões Data Versão Descrição Autor 30/09/2011 1.0 Criação da primeira versão HEngholmJr CONTEÚDO Exclusão de registros Consultas por Dados de Resumo Group by / Having Funções

Leia mais

ESTRUTURA INTERNA DO SISTEMA ESTRUTURA GERAL DO SGBD. Desempenho do BD ÙSatisfação do usuário. A performance do sistema depende:

ESTRUTURA INTERNA DO SISTEMA ESTRUTURA GERAL DO SGBD. Desempenho do BD ÙSatisfação do usuário. A performance do sistema depende: ESTRUTURA INTERNA DO SISTEMA ESTRUTURA GERAL DO SGBD Desempenho do BD ÙSatisfação do usuário USUÁRIO A performance do sistema depende: da eficiência das estruturas de dados utilizadas; como o sistema opera

Leia mais

SQL - Criação de Tabelas

SQL - Criação de Tabelas SQL - Criação de Tabelas André Restivo Faculdade de Engenharia da Universidade do Porto February 24, 2012 André Restivo (FEUP) SQL - Criação de Tabelas February 24, 2012 1 / 25 Sumário 1 Introdução 2 Tabelas

Leia mais

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados Banco de Dados SQL Structured Query Language Uma das mais importantes linguagens relacionais (se não a mais importante) Exemplos de SGBD que utilizam SQL Oracle Informix

Leia mais

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa 10.1.4217

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa 10.1.4217 Estruturas de Armazenamento e Indexação Rafael Lage Moreira Barbosa 10.1.4217 Estruturas de Armazenamento Banco de Dados são armazenados fisicamente como arquivos de registro, que em geral ficam em discos

Leia mais

SQL comando SELECT. SELECT [DISTINCT] FROM [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda. SQL comando SELECT Uma das tarefas mais requisitadas em qualquer banco de dados é obter uma listagem de registros armazenados. Estas tarefas são executadas pelo comando SELECT Sintaxe: SELECT [DISTINCT]

Leia mais

Linguagem SQL (Parte II)

Linguagem SQL (Parte II) Universidade Federal de Sergipe Departamento de Sistemas de Informação Itatech Group Jr Softwares Itabaiana Site: www.itatechjr.com.br E-mail: contato@itatechjr.com.br Linguagem SQL (Parte II Introdução

Leia mais

Administração de Banco de Dados

Administração de Banco de Dados Administração de Banco de Dados Adriano J. Holanda http://holanda.xyz 28/8/2015 Índices Para os testes com os índices criaremos uma tabela chamada tteste com o comando teste=> CREATE TABLE tteste (id int4);

Leia mais

Manter estatísticas atualizadas é uma das regras de ouro na busca por performance.

Manter estatísticas atualizadas é uma das regras de ouro na busca por performance. Atualização de Estatísticas Um objeto de estatística pode ser atualizado manualmente pelo usuário, através dos comandos SP_UPDATESTATS e/ou UPDATE STATISTICS. Enquanto que a procedure SP_UPDATESTATS atualiza

Leia mais

SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS)

SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS) SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS) SQL SQL, é uma linguagem de programação que foi desenvolvida para questionar bases de dados relacionais

Leia mais

Sistema de Ficheiros

Sistema de Ficheiros Sistema de Ficheiros 1 Armazenamento de Informação de Longa Duração 1. Deve guardar grandes quantidades de dados 2. Informação guardada deve sobreviver à terminação dos processos 3. Múltiplos processos

Leia mais

PHP INTEGRAÇÃO COM MYSQL PARTE 1

PHP INTEGRAÇÃO COM MYSQL PARTE 1 INTRODUÇÃO PHP INTEGRAÇÃO COM MYSQL PARTE 1 Leonardo Pereira leonardo@estudandoti.com.br Facebook: leongamerti http://www.estudandoti.com.br Informações que precisam ser manipuladas com mais segurança

Leia mais

2008.1 SQL. Autor: Renata Viegas

2008.1 SQL. Autor: Renata Viegas SQL Autor: Renata Viegas A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua

Leia mais

Profº Aldo Rocha. Banco de Dados

Profº Aldo Rocha. Banco de Dados Profº Aldo Rocha Banco de Dados HOJE! CREATE TABLE com uma Chave primária Primeiramente façam um SELECT na tabela pessoa. Percebam que não há NENHUMA CHAVE PRIMÁRIA. utilizem o comando SHOW CREATE TABLE

Leia mais

Universidade Nova de Lisboa Faculdade de Ciências e Tecnologia Departamento de Informática

Universidade Nova de Lisboa Faculdade de Ciências e Tecnologia Departamento de Informática Universidade Nova de Lisboa Faculdade de Ciências e Tecnologia Departamento de Informática Trabalho Prático de Sistemas de Gestão de Base de Dados 1º Semestre, 2011/2012 Armazenamento e Estrutura de Indexação

Leia mais

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL 1. O que é Linguagem SQL 2. Instrução CREATE 3. CONSTRAINT 4. ALTER TABLE 5. RENAME TABLE 6. TRUCANTE TABLE 7. DROP TABLE 8. DROP DATABASE 1 1. O que é Linguagem SQL 2. O SQL (Structured Query Language)

Leia mais

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável. SQL (Structured Query Language) SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável. Além de permitir a realização de consultas, SQL possibilita: definição

Leia mais

2008.1. A linguagem SQL

2008.1. A linguagem SQL SQL 2008.1 A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua primeira versão

Leia mais

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos Objetivos: Criar restrições para atributos, chaves primárias e estrangeiras; Explorar consultas SQL com uso de

Leia mais

ROTEIRO. A Linguagem SQL (I parte) CEFET.PHB - PI Prof. Jefferson Silva. As partes da linguagem SQL. A Linguagem de Definição de Dados (SQL-DDL)

ROTEIRO. A Linguagem SQL (I parte) CEFET.PHB - PI Prof. Jefferson Silva. As partes da linguagem SQL. A Linguagem de Definição de Dados (SQL-DDL) CEFET.PHB - PI Prof. Jefferson Silva SQL (MySql) ROTEIRO I PARTE - INTRODUÇÃO AO SQL COMANDOS E SUAS PARTES DA LINGUAGEM SQL II PARTE ADMINSTRAÇÃO DE BANCO DE DADOS UTILIZANDO MYSQL PRINCIPAIS INSTRUÇÕES

Leia mais

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela Certamente você já ouviu falar muito sobre triggers. Mas o quê são triggers? Quando e como utilizá-las?

Leia mais

Relatório de SBD. Ricardo Martins, nº 26013, LEI João Furtado, nº 40147, MEI João Rato, nº 41045, MEI Grupo 3

Relatório de SBD. Ricardo Martins, nº 26013, LEI João Furtado, nº 40147, MEI João Rato, nº 41045, MEI Grupo 3 Relatório de SBD Ricardo Martins, nº 26013, LEI João Furtado, nº 40147, MEI João Rato, nº 41045, MEI Grupo 3 Índice 1. INTRODUÇÃO... 4 2. ARMAZENAMENTO E FILE STRUCTURE... 5 2.1 BUFFER MANAGEMENT... 5

Leia mais

Prof. Carlos Majer Aplicações Corporativas UNICID

Prof. Carlos Majer Aplicações Corporativas UNICID Este material pertence a Carlos A. Majer, Professor da Unidade Curricular: Aplicações Corporativas da Universidade Cidade de São Paulo UNICID Licença de Uso Este trabalho está licenciado sob uma Licença

Leia mais

Infraestrutura de Hardware. Memória Virtual

Infraestrutura de Hardware. Memória Virtual Infraestrutura de Hardware Memória Virtual Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido e executado pelo HW? Qual é a interface

Leia mais

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011 Banco de Dados I Aula 12 - Prof. Bruno Moreno 04/10/2011 Plano de Aula SQL Definição Histórico SQL e sublinguagens Definição de dados (DDL) CREATE Restrições básicas em SQL ALTER DROP 08:20 Definição de

Leia mais

Introdução ao SQL. O que é SQL?

Introdução ao SQL. O que é SQL? Introdução ao SQL 1 O que é SQL? Inicialmente chamada de Sequel, SQL (Structured Query Language), é a linguagem padrão utilizada para comunicar-se com um banco de dados relacional. A versão original foi

Leia mais

Linguagem SQL Parte I

Linguagem SQL Parte I FIB - Centro Universitário da Bahia Banco de Dados Linguagem SQL Parte I Francisco Rodrigues Santos chicowebmail@yahoo.com.br Slides gentilmente cedidos por André Vinicius R. P. Nascimento Conteúdo A Linguagem

Leia mais

Transações Seguras em Bancos de Dados (MySQL)

Transações Seguras em Bancos de Dados (MySQL) Transações Seguras em Bancos de Dados (MySQL) Índice Entendendo os storage engines do MySQL 5 1 As ferramentas 1 Mais algumas coisas que você deve saber 1 Com a mão na massa 2 Mais ferramentas Usando o

Leia mais

ADMINISTRAÇÃO DE BANCO DE DADOS

ADMINISTRAÇÃO DE BANCO DE DADOS ADMINISTRAÇÃO DE BANCO DE DADOS ARTEFATO 06 AT06 Índices 1 Indice INTRODUÇÃO... 3 CLUSTERED INDICES... 4 NONCLUSTERED INDICES... 5 TRANSACT-SQL AND INDICES... 6 COMPOSITE INDEX... 8 ALTERING INDICES...

Leia mais

O que são Bancos de Dados?

O que são Bancos de Dados? SQL Básico Liojes de Oliveira Carneiro professor.liojes@gmail.com www.professor-liojes.blogspot.com O que são Bancos de Dados? É o software que armazena, organiza, controla, trata e distribui os dados

Leia mais

SQL - Banco de Dados. Disciplina: Banco de Dados. Professor: José Antônio. José Antônio - CEFET-RN 23/09/2015

SQL - Banco de Dados. Disciplina: Banco de Dados. Professor: José Antônio. José Antônio - CEFET-RN 23/09/2015 SQL - Banco de Dados 1 Disciplina: Banco de Dados Professor: José Antônio 2 Tópicos de discussão Criando um banco de dados Incluindo, atualizando e excluindo linhas nas tabelas Pesquisa básica em tabelas

Leia mais

Trabalho de SBD Estudo do sistema POSTGRESQL

Trabalho de SBD Estudo do sistema POSTGRESQL Trabalho de SBD Estudo do sistema POSTGRESQL João Miguel Vaz, 31644 Ricardo Vaz Alves, 31229 Vasco Jorge Pessanha, 31235 Índice 1. Introdução:... 4 1.1. História dos SGBDs... 4 1.2. História do PostgreSQL...

Leia mais

Laboratório de Banco de Dados II

Laboratório de Banco de Dados II Laboratório de Banco de Dados II Esquema de um banco de dados relacional Em aulas anteriores, vocês implantaram um projeto físico de banco de dados com todos os seus elementos, inclusive tratando do projeto

Leia mais

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Programação SQL. Manipulação de Dados. DML Data Manipulation Language Programação SQL Manipulação de Dados DML Data Manipulation Language Manipulação de Dados (DML) Os comandos INSERT, UPDATE, DELETE, são normalmente classificados como pertencendo a uma sublinguagem da linguagem

Leia mais

Comandos DDL. id_modulo = id_m odulo

Comandos DDL. id_modulo = id_m odulo Comandos DDL Estudo de Caso Controle Acadêmico Simplificado Uma escola contém vários cursos, onde cada aluno possui uma matricula num determinado curso. Estes cursos, por sua vez, possuem módulos, aos

Leia mais

Prof. Daniela Barreiro Claro

Prof. Daniela Barreiro Claro Arquivos de registros Abstração do SGBD Pode ser criado, destruido e ter registros incluidos e excluidos nele Tb suporta a varredura Uma relacao geralmente é armazenada como um arquivo de registros Camada

Leia mais

Bases de Dados II 6638: BSc in Information Systems and Technologies. Cap. 1 Arquitectura de Sistemas de Bases de Dados. Module Introduction

Bases de Dados II 6638: BSc in Information Systems and Technologies. Cap. 1 Arquitectura de Sistemas de Bases de Dados. Module Introduction Bases de Dados II 6638: BSc in Information Systems and Technologies Cap. 1 Module Introduction Objectivos O propósito e a origem da arquitectura de base de dados a três níveis. O conteúdo dos níveis externo,

Leia mais

Linguagem SQL Sub-linguagem DDL

Linguagem SQL Sub-linguagem DDL Linguagem SQL Sub-linguagem DDL A SQL - Structured Query Language, foi desenvolvido pela IBM em meados dos anos 70 como uma linguagem de manipulação de dados (DML - Data Manipulation Language para suas

Leia mais

Sistemas de Informação

Sistemas de Informação Sistemas de Informação Rules and Triggers André Restivo Sistemas de Informação 2006/07 Rules e Triggers Nem todas as restrições podem ser definidas usando os mecanismos que estudamos anteriormente: - CHECK

Leia mais

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA Sistemas Operativos 2003/2004 Trabalho Prático #2 -- Programação em C com ponteiros -- Objectivos Familiarização

Leia mais

Controle de transações em SQL

Controle de transações em SQL Transações Controle de transações em SQL Uma transação é implicitamente iniciada quando ocorre uma operação que modifica o banco de dados (INSERT, UPDATE ou DELETE). Uma transação pode terminar normalmente

Leia mais

Principais Instruções em SQL. Contidas nesta apostila as principais instruções em SQL para a manutenção em Bancos de Dados.

Principais Instruções em SQL. Contidas nesta apostila as principais instruções em SQL para a manutenção em Bancos de Dados. Principais Instruções em SQL Contidas nesta apostila as principais instruções em SQL para a manutenção em Bancos de Dados. Atenção: Esta apostila foi desenvolvida com o auxílio on-line do banco MS-ACCESS,

Leia mais

Banco de Dados. Maurício Edgar Stivanello

Banco de Dados. Maurício Edgar Stivanello Banco de Dados Maurício Edgar Stivanello Agenda Conceitos Básicos SGBD Projeto de Banco de Dados SQL Ferramentas Exemplo Dado e Informação Dado Fato do mundo real que está registrado e possui um significado

Leia mais

Armazenamento e Indexação 5

Armazenamento e Indexação 5 Armazenamento e Indexação 5 Nestes casos, podem evitar-se operações dispendiosas de ordenação de registos, pelo que pode valer a pena criar índices nas colunas da cláusula WHERE com determinadas ordenações.

Leia mais

Sistemas de Base de Dados

Sistemas de Base de Dados Sistemas de Base de Dados Análise do SGBD PostgreSQL Bruno Barão nº28061 Fábio Afonso nº30218 Hugo Fernandes nº28062 Índice de Conteúdos Índice de Conteúdos...ii Introdução... 1 Introdução Histórica...

Leia mais

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti ESTRUTURAS DE DADOS I Notas de Aula 1 SUMÁRIO 1. INTRODUÇÃO... 2 1.1 Array (vetores)... 2 2. BUSCA DE ELEMENTOS... 3 2.1 Busca Seqüencial... 3 2.2 Busca Binária... 3 2.3 Busca Indexada... 3 2.4 Busca Hash...

Leia mais

Projeto de Banco de Dados: Empresa X

Projeto de Banco de Dados: Empresa X Projeto de Banco de Dados: Empresa X Modelo de negócio: Empresa X Competências: Analisar e aplicar o resultado da modelagem de dados; Habilidades: Implementar as estruturas modeladas usando banco de dados;

Leia mais

António Rocha Nuno Melo e Castro

António Rocha Nuno Melo e Castro António Rocha Nuno Melo e Castro SQL- Strutured Query Language é a linguagem mais usada nas bases dados relacionais. Originalmente desenvolvida pela IBM Actualmente é um standard, o mais recente é o SQL:2003

Leia mais

Linguagem de Consulta Estruturada (SQL)

Linguagem de Consulta Estruturada (SQL) Linguagem de Consulta Estruturada (SQL) Conceitos sobre a versão ANSI da SQL, a sublinguagem de definição de dados (DDL) e a sublinguagem de manipulação de dados (DML) Prof. Flavio Augusto C. Correia 1

Leia mais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS AULA 2 INTERAÇÃO COM O BANCO DE DADOS BANCO DE DADOS POSTGRESQL O PostgreSQL é um sistema gerenciador de banco de dados dos mais robustos e avançados do mundo. Seu código é aberto e é totalmente gratuito,

Leia mais

Gerenciamento de um Sistema de

Gerenciamento de um Sistema de SBD Gerenciamento de um Sistema de Banco de Dados Prof. Michel Nobre Muza ua michel.muza@ifsc.edu.br Prof. Marcos Antonio Viana Nascimento Por que é importante: Motivação Participar na organização e no

Leia mais

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015 Sistemas de ficheiros: implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Objetivos da aula Descrever algunsdetalhes daimplementação deumsistema de ficheiros Discutir algoritmos

Leia mais

SQL: Definição de tabelas, Modificações à Base de Dados

SQL: Definição de tabelas, Modificações à Base de Dados SQL: Definição de tabelas, Modificações à Base de Dados Fernando Lobo Base de Dados, Universidade do Algarve 1 / 24 Definição do esquema da base de dados O esquema da BD é composto pelas definições de

Leia mais

DICIONÁRIOS. template class Par { public: K chave; T valor; Par():chave(),valor()

DICIONÁRIOS. template<class K,class T> class Par { public: K chave; T valor; Par():chave(),valor() DICIONÁRIOS Esta estrutura inclui-se nos chamados contentores associativos, que não são mais do que uma colecção de estruturas de tipo Par, com dois membros de dados (chave de pesquisa e valor associado),

Leia mais

Bases de Dados 2007/2008. Aula 9

Bases de Dados 2007/2008. Aula 9 Bases de Dados 2007/2008 Aula 9 1. T-SQL TRY CATCH 2. TRATAMENTO ERROS RAISERROR 3. TRIGGERS 4. EXERCÍCIOS Sumário Referências http://msdn2.microsoft.com/en-us/library/ms189826.aspx (linguagem t-sql) http://www.di.ubi.pt/~pprata/bd/bd0405-proc.sql

Leia mais

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados SQL (Structured Querie Language) SQL é mais que uma linguagem de interrogação estruturada. Inclui características para a definição da estrutura de dados, para alterar os dados de uma base de dados, e para

Leia mais

SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL

SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL Criar uma base de dados (criar um banco de dados) No mysql: create database locadora; No postgresql: createdb locadora Criar

Leia mais

Banco de Dados. Prof. Antonio

Banco de Dados. Prof. Antonio Banco de Dados Prof. Antonio SQL - Structured Query Language O que é SQL? A linguagem SQL (Structure query Language - Linguagem de Consulta Estruturada) é a linguagem padrão ANSI (American National Standards

Leia mais

Linguagem SQL (Parte I)

Linguagem SQL (Parte I) Universidade Federal de Sergipe Departamento de Sistemas de Informação Itatech Group Jr Softwares Itabaiana Site: www.itatechjr.com.br E-mail: contato@itatechjr.com.br Linguagem SQL (Parte I) Introdução

Leia mais

SQL Structured Query Language. SQL Linguagem de Definição de Dados. SQL Structured Query Language. SQL Structured Query Language

SQL Structured Query Language. SQL Linguagem de Definição de Dados. SQL Structured Query Language. SQL Structured Query Language Pós-graduação em Ciência da Computação CCM-202 Sistemas de Banco de Dados SQL Linguagem de Definição de Dados Profa. Maria Camila Nardini Barioni camila.barioni@ufabc.edu.br Bloco B - sala 937 2 quadrimestre

Leia mais

BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento

BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento BC 1518 - Sistemas Operacionais Sistema de Arquivos (aula 10 Parte 2) Prof. Marcelo Z. do Nascimento 1 Gerência de espaço em disco Cópia de segurança do sistema de arquivo Roteiro Confiabilidade Desempenho

Leia mais