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 " 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 " 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 operadores = 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

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

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 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

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

Tarefa Orientada 16 Vistas

Tarefa Orientada 16 Vistas Tarefa Orientada 16 Vistas Objectivos: Vistas só de leitura Vistas de manipulação de dados Uma vista consiste numa instrução de SELECT que é armazenada como um objecto na base de dados. Deste modo, um

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente

Bases de Dados. Lab 1: Introdução ao ambiente Departamento de Engenharia Informática 2010/2011 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

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

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

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito) 8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito) Nos itens anteriores vimos transações do tipo explícitas, ou seja, aquelas que iniciam com BEGIN TRANSACTION. As outras

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

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

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

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis. 3. Tabelas de Hash As tabelas de hash são um tipo de estruturação para o armazenamento de informação, de uma forma extremamente simples, fácil de se implementar e intuitiva de se organizar grandes quantidades

Leia mais

Sistema de Arquivos FAT

Sistema de Arquivos FAT Sistemas Operacionais Sistema de Arquivos FAT Edeyson Andrade Gomes www.edeyson.com.br FAT A FAT é o sistema de arquivos usado pelo MS-DOS e outros sistemas operacionais baseados em Windows para organizar

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

Tarefa Orientada 15 Manipulação de dados

Tarefa Orientada 15 Manipulação de dados Tarefa Orientada 15 Manipulação de dados Objectivos: Criação de tabelas teste Comando INSERT INTO Inserção de dados Comando INSERT Actualização de dados Comando UPDATE Eliminação de dados Comando DELETE

Leia mais

1. Domínio dos Atributos

1. Domínio dos Atributos Structure Query Language SQL Guilherme Pontes lf.pontes.sites.uol.com.br 1. Domínio dos Atributos Por domínio, ou tipo, pode-se entender como a maneira como determinado atributo (ou campo, se tratando

Leia mais

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [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

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

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

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

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10 ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10 Índice 1. A Organização do Computador - Continuação...3 1.1. Memória Primária - II... 3 1.1.1. Memória cache... 3 1.2. Memória Secundária... 3 1.2.1. Hierarquias de

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

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1.

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1. Departamento de Engenharia Informática 2008/2009 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

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

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º

Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º Pesquisa Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) Ficheiro (ou tabela) Campos Nome Endereço Telefone Antunes, João A. R. P. António Viera, 23 720456

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

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

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

Algoritmos de pesquisa. Tabelas de dispersão/hash

Algoritmos de pesquisa. Tabelas de dispersão/hash Algoritmos de pesquisa Tabelas de dispersão/hash Introdução Motivação: Considerar o problema de pesquisar um determinado valor num vetor (array). Se o vetor não está ordenado, a pesquisa requer O(n) de

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

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

Construção Páginas de Internet

Construção Páginas de Internet Construção Páginas de Internet Definir um Site no Frontpage Objectivos da sessão: No final da sessão os formandos deverão ser capazes de: Saber o que são os metadados do Frontpage; Distinguir entre Sites

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

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum Prof. Ricardo José Pfitscher dcc2rjp@joinville.udesc.br Material cedido por: Prof. Rafael Rodrigues Obelheiro Prof. Maurício Aronne Pillon Cronograma Introdução

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

Sistemas Operacionais Arquivos. Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br)

Sistemas Operacionais Arquivos. Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Sistemas Operacionais Arquivos Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Copyright Carlos Ferraz Cin/UFPE Implementação do Sistema de Arquivos Sistemas de arquivos são

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

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

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

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

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo ) Tecnologia em Análise e Desenvolvimento de Sistemas Disciplina: B1SGB - Sistemas Gerenciadores de Banco de Dados Memória de aula Aula 10 1) Incluindo linhas nas tabelas a. Para incluir linhas em tabelas

Leia mais

Sistemas Operativos I

Sistemas Operativos I Gestão da Memória Luis Lino Ferreira / Maria João Viamonte Fevereiro de 2006 Gestão da Memória Gestão de memória? Porquê? Atribuição de instruções e dados à memória Endereços lógicos e físicos Overlays

Leia mais

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2 FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO Projeto e Análise de Algoritmos II Lista de Exercícios 2 Prof. Osvaldo. 1. Desenvolva algoritmos para as operações abaixo e calcule a complexidade

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

O AMBIENTE DE TRABALHO DO WINDOWS

O AMBIENTE DE TRABALHO DO WINDOWS O AMBIENTE DE TRABALHO DO WINDOWS O Windows funciona como um Sistema Operativo, responsável pelo arranque do computador. Um computador que tenha o Windows instalado, quando arranca, entra directamente

Leia mais

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade Base de dados I O que é? Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade Para que serve? Serve para gerir vastos conjuntos de informação de

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerenciamento de Memória Norton Trevisan Roman Marcelo Morandini Jó Ueyama Apostila baseada nos trabalhos de Kalinka Castelo Branco, Antônio Carlos Sementille, Paula Prata e nas transparências

Leia mais

Tarefa Orientada 12 Junção Externa, Auto-Junção e União

Tarefa Orientada 12 Junção Externa, Auto-Junção e União Tarefa Orientada 12 Junção Externa, Auto-Junção e União Objectivos: Junção externa (Outer JOIN) Junção externa à esquerda (LEFT Outer JOIN) Junção externa à direita (RIGHT Outer JOIN) Junção externa completa

Leia mais

PLANEAMENTO DA INSTALAÇÃO DO WINDOWS SERVER 2003

PLANEAMENTO DA INSTALAÇÃO DO WINDOWS SERVER 2003 PLANEAMENTO DA INSTALAÇÃO DO WINDOWS SERVER 2003 1 PLANEAMENTO DA INSTALAÇÃO Instalar o Windows Server 2003 requer alguma preparação, devido à sua complexidade: Ao correr o programa de setup (configuração)

Leia mais

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada

Leia mais

Sistemas Operacionais: Sistema de Arquivos

Sistemas Operacionais: Sistema de Arquivos Sistemas Operacionais: Sistema de Arquivos Sistema de Arquivos Arquivos Espaço contíguo de armazenamento Armazenado em dispositivo secundário Estrutura Nenhuma: seqüência de bytes Registros, documentos,

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

Junções e Índices em Tabelas

Junções e Índices em Tabelas Junções e Índices em Tabelas Prof. Fernanda Baião fernanda.baiao@uniriotec.com.br SGBD Considerados MySQL (http://www.mysql.org) SGBD gratuito e simples, sem muitos recursos avançados Fácil de instalar

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

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

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

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

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

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

Curso de Instalação e Gestão de Redes Informáticas

Curso de Instalação e Gestão de Redes Informáticas ESCOLA PROFISSIONAL VASCONCELLOS LEBRE Curso de Instalação e Gestão de Redes Informáticas SISTEMAS DE ARQUIVOS FAT E FAT32 José Vitor Nogueira Santos FT2-0749 Mealhada, 2009 Introdução Muitos usuários

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

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

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Introdução à gestão de memória Programação de Sistemas Gestão de memória : 1/16 Introdução (1) A memória central de um computador é escassa. [1981] IBM PC lançado com 64KB na motherboard,

Leia mais

BDII SQL Junção Revisão 8

BDII SQL Junção Revisão 8 exatasfepi.com.br BDII SQL Junção Revisão 8 André Luís Duarte Leais são as feridas feitas pelo amigo, mas os beijos do inimigo são enganosos. Provérbios 27:6 SQL Introdução Produto cartesiano Nomes alternativos

Leia mais

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Uma expressão básica em SQL consiste em três cláusulas: select, from e where. Introdução a Banco de Dados O.K. Takai; I.C.Italiano; J.E. Ferreira. 67 8 A Linguagem SQL A linguagem SQL é um padrão de linguagem de consulta comercial que usa uma combinação de construtores em Álgebra

Leia mais

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2

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

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

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Manipulação de Dados Banco de Dados SQL DML SELECT... FROM... WHERE... lista atributos de uma ou mais tabelas de acordo com alguma condição INSERT INTO... insere dados em uma tabela DELETE

Leia mais

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Display de 7 Segmentos Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Sistemas de Arquivos. André Luiz da Costa Carvalho

Sistemas de Arquivos. André Luiz da Costa Carvalho Sistemas de Arquivos André Luiz da Costa Carvalho Sistemas de arquivos Sistema de arquivos é o nome que se dá a implementação da organização de dados em discos. Vai desde o acesso a baixo nível até a interface

Leia mais

AULA 6 INTEGRIDADOS DOS DADOS - CRIANDO RESTRIÇÕES

AULA 6 INTEGRIDADOS DOS DADOS - CRIANDO RESTRIÇÕES BANCO DE DADOS GERENCIAL 1 AULA 6 INTEGRIDADOS DOS DADOS - CRIANDO RESTRIÇÕES Integridade de domínio A integridade de domínio é a validade de entradas para uma coluna específica. É possível aplicar a integridade

Leia mais

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a.

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a. Atividade 6 Batalha Naval Algoritmos de Busca Sumário Computadores são freqüentemente requisitados a encontrar informação em grandes coleções de dados. Estes precisam desenvolver métodos rápidos e eficientes

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

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos. Banco de Dados O que é um Banco de Dados? Este assunto é muito vasto, tentaremos resumi-lo para atender as questões encontradas em concursos públicos. Já conhecemos o conceito de dado, ou seja, uma informação

Leia mais

MANUAL DO UTILIZADOR

MANUAL DO UTILIZADOR MANUAL DO UTILIZADOR Versão 1.6 PÁGINA DE PESQUISA A página principal do PacWeb permite a realização de um número muito variado de pesquisas, simples, ou pelo contrário extremamente complexas, dependendo

Leia mais

Busca. Pesquisa sequencial

Busca. Pesquisa sequencial Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um

Leia mais

Memória cache. Prof. Francisco Adelton

Memória cache. Prof. Francisco Adelton Memória cache Prof. Francisco Adelton Memória Cache Seu uso visa obter uma velocidade de acesso à memória próxima da velocidade das memórias mais rápidas e, ao mesmo tempo, disponibilizar no sistema uma

Leia mais

No VirtualBox, carregar no Botão Novo (New), que irá abrir o Assistente de Criação de Máquina Virtual para criar uma nova VM.

No VirtualBox, carregar no Botão Novo (New), que irá abrir o Assistente de Criação de Máquina Virtual para criar uma nova VM. INSTALAÇÃO E GESTÃO DE REDES INFORMÁTICAS EFA NS/NÍVEL III UFCD 5 FORMADOR: PAULO RELVAS Fontes: http://www.formatds.org/instalar-ubuntu-no-virtualbox/ MANUAL DE INSTALAÇÃO UBUNTU 8.10 SOBRE VBOX DA SUN

Leia mais

P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A. Criar uma relação mestre-detalhe. Pesquisa de informação

P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A. Criar uma relação mestre-detalhe. Pesquisa de informação P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A Módulo 18 Ferramentas de Desenvolvimento de Páginas Web Criar uma relação mestre-detalhe 1. Cria uma cópia da página «listaferram.php»

Leia mais

Tabela de símbolos: tabelas de espalhamento

Tabela de símbolos: tabelas de espalhamento Tabela de símbolos: tabelas de espalhamento Marcelo K. Albertini 14 de Janeiro de 2014 2/28 Resumo de complexidades Análises para operação efetuada após N inserções pior caso caso médio keys chave get

Leia mais

Ministério das Finanças Instituto de Informática. Departamento de Sistemas de Informação

Ministério das Finanças Instituto de Informática. Departamento de Sistemas de Informação Ministério das Finanças Instituto de Informática Departamento de Sistemas de Informação Assiduidade para Calendários Específicos Junho 2010 Versão 6.0-2010 SUMÁRIO 1 OBJECTIVO 4 2 ECRÃ ELIMINADO 4 3 NOVOS

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

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

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011 BASES DE DADOS I LTSI/2 Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011 A Linguagem SQL As raízes da linguagem SQL remontam a 1974, altura em que a IBM desenvolvia

Leia mais

1. SQL Instrumental...2 1.1 Select...3 1.2 Delete...13 1.3 Update... 1.4 Insert... 1.5 Group by... 1.6 Having... 1.7 Unnion All...

1. SQL Instrumental...2 1.1 Select...3 1.2 Delete...13 1.3 Update... 1.4 Insert... 1.5 Group by... 1.6 Having... 1.7 Unnion All... SQL 1. SQL Instrumental...2 1.1 Select...3 1.2 Delete...13 1.3 Update... 1.4 Insert... 1.5 Group by... 1.6 Having... 1.7 Unnion All... 2. Servidor... 2.1 Ativando log no Broker... 2.2 Leitura do log no

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

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

NOME SEXO CPF NASCIMENTO SALARIO

NOME SEXO CPF NASCIMENTO SALARIO Tutorial SQL Fonte: http://www.devmedia.com.br/articles/viewcomp.asp?comp=2973 Para começar Os Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDr) são o principal mecanismo de suporte ao armazenamento

Leia mais

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo Iniciar o Data Adapter Configuration Wizard Toolbox Data Duplo clique em OleDbDataAdapter Botão next na caixa de diálogo Se carregar em Cancel, o wizard é cancelado e podemos depois definir as propriedades

Leia mais

Tarefa Orientada 11 Junção Interna

Tarefa Orientada 11 Junção Interna Tarefa Orientada 11 Junção Interna Objectivos: Junção Interna (INNER JOIN) Junção Interna A operação de junção interna (INNER JOIN) é utilizada para combinar colunas de duas ou mais tabelas. O resultado

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 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