Introduzione a PostgreSQL

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Introduzione a PostgreSQL"

Transcript

1 Introduzione a PostgreSQL (il piu' avanzato database OpenSource al mondo) Ing. Luca Ferrari, PhD Italian PostgreSQL Users Group ITPug

2 Synopsis Questa presentazione vuole introdurre PostgreSQL, il piu' avanzato database OpenSource al mondo. Verranno trattati diversi temi, fra i quali i principali sono: La comunità internazionale e nazionale La storia del progetto, lo stato attuale e gli sviluppi futuri Installazione e utilizzo di base del sistema Accenni al funzionamento interno Transazioni Window Functions e CTE Cool Features Partitioning 2 di 139

3 Database Un database è un contenitore di dati (generalmente strutturati). Perché occorre usare un database? Principio di delega: il database si occupa solo dei dati, e li gestisce nel modo migliore indipendentemente dalle applicazioni che ne hanno bisogno. Fruibilità: usando un database i dati vengono svincolati dalla applicazione, e quindi i dati possono essere accessibili da diverse applicazioni. 3 di 139

4 Vantaggi nell'uso di un database Il database si occupa della gestione degli accessi allo spazio di memorizzazione (disco) Il database organizza i dati in modo da garantire il miglior accesso agli stessi Il database mantiene i dati coerenti (non significa corretti, ma non sbagliati) Il database gestisce gli accessi concorrenti Il database consente backup, ripristino, replicazione, Non si reinventa la ruota! 4 di 139

5 Tipologie di database I database possono essere classificati in base alle loro caratteristiche in diversi insiemi ortogonali: Relational Database Object Database Embedded (es. BerkelyDB, Derby) Server (es. MySQL, PostgreSQL) Document Oriented (CouchDB, Haddop)... 5 di 139

6 Database maggiormente affermati I database maggiormenti affermati sono quelli di tipo relazionale, con tuple disposte per righe (esistono anche database per colonne!). Il linguaggio (dichiarativo) standard per l'interazione con tali database è lo Structured Query Language (SQL). 6 di 139

7 Database relazionali I dati sono correlati fra loro sulla base del loro valore. I Relational Database (RDBMS) sfruttano le foreign keys (chiavi esterne) per imporre i vincoli di integrità referenziali. Ovviamente una chiave esterna deve identificare univocamente una tupla nell'entità referenziata. 7 di 139

8 Introduzione a PostgreSQL 8 di 139

9 Introduzione a PostgreSQL PostgreSQL è un ORDBMS (Object Relational Database Management System) di classe enterprise E' un prodotto Open-Source mantenuto da un team mondiale di sviluppatori ed esperti E' conforme agli standard SQL (SQL 2003) supportandone caratteristiche sintattiche e semantiche 9 di 139

10 Storia Il prof. Michael Stonebreaker dell'university of Berkely crea un database denominato Ingres. Lascia poi l'università per creare un'azienda che si occupi del business Ingres. Successivamente torna all'università con l'intenzione di creare un nuovo database, sfruttando quanto imparato dal progetto Ingres. 1986: 1986 il prof. Stonebreaker è a capo di un progetto finanziato da DARPA e ARO per la creazione di POSTGRES; 1988: 1988 la prima versione di POSTGRES; 1990: 1990 POSTGRES v : 1991 POSTGRES v : 1994 Andrew Yu e Jolly Chen aggiungono il supporto per l SQL; il pacchetto viene rilasciato con il nome di POSTGRES95; 1996: 1996 continua lo sviluppo, si cambia nome in POSTGRESQL v.6; 2006: 2006 viene rilasciata la versione : 2007 primo PGDay in Italia (international) 2008: 2008 viene rilasciata la versione 8.3 secondo PGDay in Italia (international) - ITPUG 2009: 2009 viene rilasciata la versione 8.4 terzo PGDay in Italia (National) 2010: 2010 viene rilasciata la versione di 139

11 La nascita del Core Team La nascita del Core Team Date: Mon, 08 Jul :12: (EDT) Date: Mon, 08 Jul :12: (EDT) From: "Marc G. Fournier" From: "Marc G. Fournier" Subject: [PG95]: Developers interested in improving PG95? Subject: [PG95]: Developers interested in improving PG95? To: Postgres 95 Users To: Postgres 95 Users Hi... A while back, there was talk of a TODO list and development moving forward on Hi... A while back, there was talk of a TODO list and development moving forward on Postgres95... at which point in time I volunteered to put up a cvs archive and sup server Postgres95... at which point in time I volunteered to put up a cvs archive and sup server so that making updates (and getting at the "newest source code") was easier to do... so that making updates (and getting at the "newest source code") was easier to do Just got the sup server up and running, and for those that are familiar with sup, the... Just got the sup server up and running, and for those that are familiar with sup, the following should work (ie. I can access the sup server from my machines using this): following should work (ie. I can access the sup server from my machines using this): Thomas Lockhart (ritirato), Jan Wieck, Tom Lane, Marc Fournier Vadim Mikheev, Bruce Momjian 11 di 139

12 Caratteristiche principali Modello client-server: i dati sono gestiti in modo centralizzato (server) e messi a disposizione di più fruitori (client) Avanzato supporto per lo standard SQL2003: garantisce la portabilità di applicazioni Concorrenza e Multi-utenza: supporta connessioni e query multiple contemporaneamente Integrità referenziale: garantisce la coerenza dei dati rispetto alle business rules Transazioni: esecuzione di più istruzioni in modo coerente (ACID rules) Sub-query: possibilità di innestare le query Indici: diverse modalità di accesso rapido ai dati (anche per controllo di coerenza) Replica: possibilità di sincronizzare due o più istanze fra loro 12 di 139

13 Caratteristiche principali Query planner: le query sono analizzate per individuare il miglior percorso di accesso ai dati Triggers: reazione agli eventi di inserimento, cancellazione, aggiornamento di tuple Rules: possibilità di ordinare la riscrittura di query Stored procedures: funzioni memorizzate presso il server Ereditarietà: relazione padre-figlio fra le tabelle Sequenze: produzione di valori auto-incrementati Tipi di dato: possibilità di definire un tipo di dato personalizzato Tablespaces: controllo sullo storage fisico Partizionamento: possiblità di separare i dati e organizzarli secondo le esigenze fisiche di storage Connettività da diversi linguaggi: Perl, Java, C, Python, Ruby, PHP,... Linguaggi integrati: PL/Perl, PL/Java, PL/PGSQL, Common Table Expressions: CTE (clausola WITH) 13 di 139

14 Licenza BSD like PostgreSQL Database Management System (formerly known as Postgres, then as Postgres95) Portions Copyright (c) , The PostgreSQL Global Development Group Portions Copyright (c) 1994, The Regents of the University of California Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 14 di 139

15 Un problema di diffusione? It is a simple, permissive non copyleft free software license, compatible with the GNU GPL. We urge you not to use the original BSD license for software you write. 15 di 139

16 16 di 139

17 Esiste anche il planet italiano: 17 di 139

18 18 di 139

19 Users' Group Italiano di PostgreSQL Fornisce un front end per le aziende e le istituzioni che vogliano usare PostgreSQL. Si occupa della diffusione di PostgreSQL e della sua ideologia. Definisce una serie di chapter regionali per la localizzazione sul territorio. 19 di 139

20 20 di 139

21 PostgreSQL Weekly News 21 di 139

22 Community 22 di 139

23 Installazione, concetti base e primo utilizzo 23 di 139

24 Numeri di versione Il Il primo primo numero numero è è un un major major number number e e indica il settore di mercato in cui si indica il settore di mercato in cui si colloca la release. colloca la release. Ad esempio la 7.x.x era denominata no Ad esempio la 7.x.x era denominata no crash, la 8.x.x era quella con il port crash, la 8.x.x era quella con il port Windows. Windows. Il terzo numero è un minor Il terzo numero è un minor number e indica il patch level number e indica il patch level della release. della release. Richiede un nuovo initdb. Non richiede initdb. Il secondo numero è un major number e Il secondo numero è un major number e indica il numero annuale di release. indica il numero annuale di release. Deve Deve essere essere combinato combinato con con il il primo primo numero numero per per fare fare riferimento riferimento ad ad una una release specifica. release specifica. 24 di 139

25 Installazione Su Linux distribuzioni Debian-like: apt get install postgresql apt get install postgresql doc apt get install postgresql contrib Potrebbe essere necessario inizializzare la directory che conterrà i dati con initdb. Su *BSD: cd /usr/ports/databases/postgresql84server && make install E' ovviamente possibile compilare dai sorgenti, per avere un ambiente ottimizzato. Il demone PostgreSQL gestisce un cluster di database, ovvero un insieme di più database possono risiedere sullo stesso host e possono essere gestiti dallo stesso processo. 25 di 139

26 template1, template0 Appena installato il cluster mette a disposizione un database vuoto, usato come template per la creazione di altri database: template1. Tutte le caratteristiche di template1 possono essere modificate dall'utente, e saranno riflesse in ogni nuovo database creato. Il database template0 rappresenta una copia di sicurezza di template1. 26 di 139

27 Connessione al database: psql Si può usare il client testuale psql: In modo analogo ad una shell Unix, il simbolo # identifica un prompt di amministratore, mentre un carattere > un prompt di utente normale. 27 di 139

28 Password prompt degli strumenti testuali Tutti gli strumenti testuali (psql, pg_dump, pg_dumpall, ) leggono un file particolare $HOME/.pgpass che puo' contenere l'associazione server, database, username e password. <server>:<port>:<database>:<username>:<password> dbserver:5432:raydb:luca:xxx dbserver:5432:ordinidb:luca:xxx backupserver:5432:*:luca:xxx Se viene trovata l'associazione, allora la password non viene chiesta al prompt dei comandi (comodo per l'automazione di script). 28 di 139

29 Connessione al database: pgadmin3 pgadmin3 è un client grafico basato sulle librerie wxwidgets, grazie alle quali funziona su piattaforma Linux, Unix, Microsoft, Apple 29 di 139

30 Connessione al database: phpgadmin Client Web basato su PHP 30 di 139

31 Creazione di un nuovo utente Una volta collegati al database template1 è possibile creare un nuovo utente tramite CREATE USER E' possibile creare l'utente da una shell usando il comando create_user 31 di 139

32 Creazione di un database Una volta collegati al database template1 è possibile creare un nuovo database con CREATE DATABASE. 32 di 139

33 Creazione di un database Si può anche usare lo script createdb direttamente da shell. 33 di 139

34 Creazione di una semplice tabella Ci si collega al database linuxdaydb e si impartiscono i comandi necessari: CREATE TABLE Si noti la creazione dell'indice sulla chiave primaria e sul vincolo unique. Viene inoltre creata una sequenza in automatico per il campo serial. 34 di 139

35 Popolamento del database 35 di 139

36 Introspezione I comandi \ di psql consentono di effettuare introspezione sulla struttura del database. Ad esempio: \d fornisce l'elenco degli oggetti nel database \d nome_tabella fornisce la struttura di una tabella \df fornisce l'elenco delle stored procedure \df nome_funzione fornisce il codice sorgente della funzione 36 di 139

37 Introspezione: esempio 37 di 139

38 Cluster di database PostgreSQL è un demone che gestische un cluster di database. E' possibile vedere i database che una istanza gestisce mediante i comandi \list (da prompt psql) o flag -l da linea di comando psql. 38 di 139

39 postgresql.conf Il file postgresql.conf contiene parametri fondamentali configurazione del server. Alcuni interessanti sono: per la listen_address = 'localhost' {*, ip address} specifica per quali interfacce il server deve accettare connessioni log_statement = 'none' {none, all, ddl, mod} consente di abilitare il logging dei comandi SQL eseguiti dal server, utile per il debugging o il monitoring dell'attività del server shared_buffers = 24MB {almeno 16k a connessione} indica la memoria disponibile per PostgreSQL in cui conservare le pagine dati work_mem = 1MB è la memoria usata per il sorting (clausole ORDER BY) 39 di 139

40 postgresql.conf: ottimizzatore e costi # Definiscono quali metodi l'ottimizzatore può usare per l'accesso ai dati # (ad esempio si potrebbe voler impedire di usare il seqscan...) enable_bitmapscan = on enable_hashagg = on enable_hashjoin = on enable_indexscan = on enable_mergejoin = on enable_nestloop = on enable_seqscan = on enable_sort = on enable_tidscan = on # Costi (relativi) di accesso alle operazioni. Sostanzialmente sono # espressi in una scala arbitraria, si noti che il costo della pagina # è superiore a quello di un'operazione di CPU (es. sorting) seq_page_cost = 1.0 # measured on an arbitrary scale random_page_cost = 4.0 # same scale as above cpu_tuple_cost = 0.01 # same scale as above cpu_index_tuple_cost = # same scale as above 40 di 139

41 pg_hba.conf Il file pg_hba.conf (host base access) contiene le regole per l'accesso al server PostgreSQL da parte dei client della rete. Occorre specificare il database, la maschera di rete dei client (o l'indirizzo ip) e il metodo di accesso (trust, md5,...): # TYPE DATABASE USER CIDR ADDRESS METHOD local all all trust host all all /32 md5 host linuxdaydb linux /24 md5 host all all ::1/128 md5 41 di 139

42 Monitorare i processi PostgreSQL usa uno schemi a processi; oltre al server (chiamato postmaster) esiste un processo per ogni connessione utente. Unitamente vi sono dei processi per il WAL, per il BGWRITER e per lo STATISTIC COLLECTOR. 42 di 139

43 Monitorare le query in esecuzione E' possibile interrogare il catalogo di sistema visualizzare le attività in corso nel database: per In alternativa ogni processo backend collegato ad un client compare nella lista processi con il nome di postgres e ha una descrizione che rappresenta l'attività del processo in quel momento. 43 di 139

44 Statistiche usate dall'ottimizzatore La pseudo-tabella pg_stats contiene le informazioni sui valori che compaiono nelle colonne di una tabella. L'indice valuta questi valori, il loro istogramma e decide se vale la pena usare l'indice per la clausola di selezione indicata. 44 di 139

45 Creazione di tipi personalizzati E' possibile creare dei tipi di dato personalizzati, in modo da rendere più strutturata la definizione di una tabella. I tipi possono essere usati in ogni oggetto del database. 45 di 139

46 Creazione di array E' possibile inserire in una tabella un array di tipi (anche personalizzati) usando il costrutto []. Gli array possono anche diventare multi-dimensionali. L'indice dell'array parte sempre da 1! 46 di 139

47 Selezione/update dei valori di un array 47 di 139

48 Funzionamento interno 48 di 139

49 Layout fisico Tutti gli oggetti del database si trovano nella directory $PGDATA. Al suo interno vi sono diverse sotto-directory: base: contiene tutti i database e gli oggetti del database pg_clog: contiene lo stato delle transazioni in corso pg_xlog: contiene i log WAL pg_twophase: contiene le informazioni sul 2-ph commit pg_tblspc: contiene dei link ai tablespace definiti 49 di 139

50 Layout fisico: identificare gli oggetti Dal catalogo di sistema è possibile identificare i vari oggetti su disco: 50 di 139

51 Funzionamento interno Ad ogni connessione il processo postmaster effettua una fork e crea un processo postgres (backend) per gestire la connessione. Il parser analizza la query sintatticamente Il Traffic Cop decide se il comando è standard o di manutenzione (es. vacuum). Il rewriter considera le regole e riscrive la query corretta (es. query su una vista). L'ottimizzatore, tramite un algoritmo genetico, calcola il percorso migliore. L'executor esegue la query. 51 di 139

52 Shared Memory Tutti i processi postgres condividono una zona di memoria (shared memory) che contiene le pagine dati caricate. 52 di 139

53 Transazioni 53 di 139

54 Livelli di isolamento delle transazioni PostgreSQL supporta i quattro livelli di isolamento standard, ma internamente implementa tutto con solo due livelli: serializable e read committed (il default). La ragione di questa scelta implementativa è da ricercarsi nell'uso di MVCC! Livello di isolamento Read uncommitted Read committed Repeatable read Serializable Dirty Read Nonrepeatable Read Phantom Read Supportato in PostgreSQL Possibile Impossibile Impossibile Impossibile Possibile Possibile Impossibile Impossibile Possibile Possibile Possibile Impossibile NO SI NO SI Dirty Read: si leggono dati non ancora committati da un'altra transazione Nonrepeatable read: dati letti in precedenza sono ora modificati dal commit di un'altra transazione. Phantom Read: il set di dati che soddisfa una certa condizione è ora cambiato. Read Committed: ogni comando vede uno snapshot dei dati già committati prima dell'inizio del comando stesso. Non sono visibili tuple committate da transazioni concorrenti se il co0mmit avviene durante il comando stesso. Nel caso di update concorrente la transazione attende la fine delle altre transazioni e rivaluta la riga prima di procedere. Serializable: ogni transazione agisce emulando la serializzazione, ossia vede solo i dati che hanno subito commit all'inizio della transazione. Lo snapshot in questo caso non cambia per nessun comando della transazione. Read Committed isolamento a livello di comando Serializable isolamento a livello di transazione 54 di 139

55 Transazioni Le transazioni sono attivate con i classici comandi BEGIN e COMMIT/ROLLBACK; le transazioni possono essere innestate (sottotransazioni). Anche i SAVEPOINT sono implementati come sottotransazioni. Livello Base (gestione di un singolo comando) StartTransactionCommand CommitTransactionCommand AbortTransactionCommand Livello Utente (gestione BEGIN/END) BeginTransactionBlock EndTransactionBlock UserAbortTransactionBlock DefineSavepoint/RollbackSavepoint ReleaseSavepoint Livello Gestione (backend) StartTransaction/CommitTransaction/AbortTransaction StartSubTransaction/CommitSubTransaction/AbortSubTransaction 55 di 139

56 Transazione e Savepoint: esempio Lo stato di una transazione (committed, in progress, aborted, subcommitted) viene memorizzato su disco all'interno della directory pg_clog. 56 di 139

57 Numerazione delle transazioni Le transazioni seguono la numerazione delle tuple: ogni transazione è identificata da un numero intero positivo e progressivo denominato XID. Lo XID è un intero a 4 byte (32 bit). L'età di una transazione è stabilita in modo relativo rispetto ad un'altra transazione: uno XID minore indica una transazione iniziata prima e quindi piu' vecchia. 57 di 139

58 Wraparound In un sistema con molte transazioni si puo' assistere ad un wraparound: due transazioni finiscono con l'avere lo stesso XID, e quindi non possono piu' essere comparate! Considerando un bit di segno, questa eventualità si verifica ogni 231 transazioni, superato il quale si ha una inversione di segno e le transazioni piu' vecchie appaiono come piu' giovani! Siccome le transazioni nel futuro non possono essere visibili (READ_COMMITTED), al wraparound si ottiene la perdita dei dati! Vacuum analizza l'età di ogni tupla (XMIN), se questo è maggiore di una soglia vicina al wraparound (min_freeze_age) allora resetta lo XMIN ad un valore di default FROZENXID. FROZENXID è l'id piu' vecchio presente nel sistema (valore numerico 3), così da apparire sempre nel passato e non essere piu' sottoposto a Vacuum. 58 di 139

59 Quanto manca al wraparound? La funzione age(..) fornisce l'età di una tupla, ovvero quante transazioni fa la tupla è stata aggiornata. Il parametro min_freeze_age determina dopo quante transazioni si deve forzare un Vacuum. 59 di 139

60 Transazioni e log: pg_clog Il log pg_clog memorizza (in modo permanente) lo stato delle transazioni avviate (ed eventualmente completate) nel sistema. Le transazioni possono essere in uno dei seguenti quattro stati (quindi richiedendo 2 bit): In progress (transazione avviata ma non completata) Committed (transazione completata con successo) Aborted (transazione completata con rollback forzato o manuale) Sub committed (sottotransazione/savepoint passato con successo) I dati di pg_clog sono mappate in memoria, così da accelerare l'accesso ai dati. L'unico caso in cui si richiede di rileggere lo stato da disco è per una transazione idle da diverso tempo. 60 di 139

61 pg_clog in dettaglio Pagina pg_clog Pagina pg_clog Le transazioni sono memorizzate secondo l'ordine dato dal loro XID (identificativo del numero di transazione). Ne consegue che, sapendo la dimensione della pagina dati, sapendo che il blocco di una singola transazione è lungo 2 bit, e sapendo l'id della transazione è possibile risalire al dato circa il suo stato. Si tenga presente che in un byte ci sono le informazioni di 4 transazioni (1 byte = 2 bit * 4). n_pagina_pg_clog = ceiling( XID / ( page_size * 4 ) ) byte_interno_alla_pagina = round( XID mod( page_size * 4 ) / 4 ) offset_nel_byte = ( XID mod 4 ) 1 Qualora lo stato di transazione non sia già in cache, la lettura da disco (funzione TransactionLogFetch) mette in cache il dato. Solitamente si tiene solo uno stato in cache (ossia una sola porzione di log), viceversa la scrittura dello stato di una transazione (functione TransactionLogUpdate) può accettare anche piu' XID contemporaneamente ( ad esempio transazioni annidate). 61 di 139

62 Locking PostgreSQL supporta diversi tipi di locking: Share: prevalentemente comandi di lettura (che possono anche aggiornare) ACCESS SHARE (pura lettura) ROW SHARE (lettura/modifica, es. SELECT FOR UPDATE) Exclusive: scrittura o alterazione della struttura ACCESS EXCLUSIVE (alterazione, ALTER TABLE) ROW EXCLUSIVE (scrittura, INSERT/UPDATE) 62 di 139

63 Multi Version Concurrency Control 63 di 139

64 MVCC PostgreSQL utilizza il Multi-Version Concurrency Control per implementare l'isolamento nelle transazioni. Concettualmente ogni transazione vede uno snapshot del database e agisce su quello snapshot. Lo snapshot è costruito considerando solo le transazioni precedenti la corrente che hanno effettuato il commit. Presuppone un livello di isolamento read-committed. E' concettualmente simile alle tecniche COW (Copy On Write, come ad esempio ZFS). 64 di 139

65 MVCC: implementazione Internamente il database deve registrare non solo le informazioni utente (i dati veri e propri) ma anche i metadati per la gestione dell'mvcc. Ogni tupla viene estesa con 4 campi particolari, usati per i controlli del sistema MVCC: xmin: indica il minimo valore di transazione che ha accesso ai dati (sostanzialmente la transazione che ha creato la tupla) xmax: indica il massimo valore di transazione che ha accesso ai dati (sostanzialmente l'id dell'ultima transazione che ha cancellato/modificato la tupla) cmin: indica il minimo valore di comando che ha accesso ai dati cmax: indica il massimo valore di transazione che ha accesso ai dati 65 di 139

66 MVCC: esempio Sostanzialmente il sistema controlla se la tupla è ancora visibile per l'id di transazione corrente (xmin <= transaction_id <= xmax) && (xmin committed) && (! (xmax committed locked)) e se è visibile per il comando corrente all'interno delle transazione (cmin <= command_id <= cmax) && (xmin committed xmin == current_transaction) && (! (xmax committed locked)) Il test è in realtà più complesso! (lock, xmax nullo se abort, commit) 66 di 139

67 MVCC: approccio visuale xmin cmin xmax cmax 20 talkspk talksid 1 pg01 2 pg02 3 pg03 descrizione PostgreSQL PostgreSQL/Python PostgreSQL/JDBC docente Luca Ferrari Luca Ferrari Luca Ferrari La riga con xmin e xmax impostati ha subito una delete (o un update) e quindi non è più valida. Tutte le transazioni successive alla numero 20 non potranno vedere quella riga, che però esiste ancora nel database. Problema: il database rimane pieno di righe non più valide! 67 di 139

68 Vacuum Il sistema esegue (manualmente o automaticamente) un comando di utilità, denominato vacuum, che controlla una tabella o un database alla ricerca delle tuple che non sono più visibili da nessuna transazione (ossia che hanno un xmax inferiore al prossimo id di transazione) e le cancella. In questo modo i dati si ricompattano e il database riduce il suo spazio. 68 di 139

69 Vacuum L'esecuzione di vacuum è un'operazione pesante, perché il sistema deve acquisire un lock esclusivo sull'oggetto. Vacuum può essere usato per eliminare le tuple espirate (vacuum full), oppure per aggiornare le statistiche di sistema (vacuum analyze). Ogni volta che vacuum esegue, lo xmin di tutte le tuple visibili viene resettato (freeze) così da prevenire problemi ad un successivo wrap-around. Può essere abilitato di default nel file postgresql.conf: autovacuum = on 69 di 139

70 Vacuum: esecuzione 70 di 139

71 Informazioni di visibilità Un'operazione di Vacuum sposta e compatta le tuple, arrivando anche a cancellare quelle espirate. Come ci si comporta con l'indice che puntava a quelle tuple? L'indice non contiene il riferimento alla tupla ma solo alla pagina dati le tuple cancellate (espirate) non comportano modifiche all'indice Le tuple spostate da Vacuum comportano un nuovo aggiornamento dell'indice. 71 di 139

72 HOT Heap Only Tuples A partire dalla versione 8.3 il sistema consente anche il microvacuum, ovvero un vacuum limitato ad una sola pagina dati. Quando viene aggiornata una tupla, e l'aggiornamento non necessità di una modifica all'indice (ossia si modificano solo le colonne fuori dagli indici): La tupla vecchia viene marcata come expired; La nuova tupla viene inserita; La tupla vecchia contiene un puntatore alla tupla nuova. Seguendo i link si trova rapidamente la tupla piu' ricente nella pagina dati. 72 di 139

73 MicroVacuum Il sistema può operare un vacuum ridotto (microvacuum) all'interno della pagina dati, rimuovendo le tuple expired e i relativi link alla tupla piu' recente. In questo modo la pagina dati rimane sempre ordinata e non c'è bisogno di grossi carichi per un vacuum globale. 73 di 139

74 WAL Il Write Ahead Log mantiene le informazioni sull'andamento delle transazioni. E' fisicamente archiviato all'interno della directory pg_xlog, e a differenza dei log in pg_clog non mantiene solo lo stato finale di una transazione, ma anche le informazioni (progressive) sui dati toccati. La teoria vuole che il WAL sia scritto prima dei dati, ma questo produrrebbe un sovraccarico di scritture. Per ovviare al problema PostgreSQL divide i WAL log in segments (LSN). A questo punto i log WAL sono mantenuti in memoria, e ogni volta che si scrive una pagina di dati sporca si fa precedere la scrittura dalla scrittura di tanti segmenti di log fino al raggiungimento del numero LSN corrispondente alla pagina. Analogamente, durante un recovery tutte le transazioni con XID inferiori al LSN che si sta attualmente analizzando sono da considerarsi stabili (ripristinate completamente). 74 di 139

75 WAL: funzionamento in breve La scrittura del WAL avviene secondo lo schema seguente: 1) acquisizione di un PIN e del lock sulla pagina dati da modificare (pin indica che la pagina non deve essere scartata dalla memoria) 2) modifica della pagina di dati 3) la pagina viene marcata come dirty 4) si richiama xloginsert per inserire la pagina di log e si imposta il LSN nella pagina dati al valore risultante dall'insert Le pagine WAL contengono modifiche in modo incrementale (delta). Problema: ci si fida delle scritture del sistema operativo? Il sistema mantiene dei checkpoints, ossia ogni n transazioni forza una scrittura di una pagina dati completa nel WAL: alla prima modifica di una pagina sotto la condizione LSN < checkpoint si scrive la pagina dati completa nel WAL. 75 di 139

76 Log in azione! 76 di 139

77 Come viene trattata una query? Nel file di configurazione è possibile abilitare dei parametri per visualizzare come una singola query viene trattata. La query viene tradotta in un AST (Abstract Syntax Tree) Vengono risolti gli alias e la query viene riscritta La query viene passata all'ottimizzatore per la creazione del piano di esecuzione 77 di 139

78 Vedere come viene trattata una query :19:46 CEST STATEMENT: SELECT description FROM skill; :19:46 CEST LOG: rewritten parse tree: :19:46 CEST DETAIL: ( {QUERY :commandtype 1 :intoclause <> :hasaggs false :haswindowfuncs false :hassublinks false :hasdistincton false :hasrecursive false :ctelist <> :rtable ( {RTE :alias <> :eref {ALIAS :aliasname skill :colnames ("skillpk" "skillid" "description" "skillfamilypk") } :rtekind 0 :relid :inh true :infromcl true :requiredperms 2 78 di 139

79 Pagine dati 79 di 139

80 Pagine dati Le pagine dati rappresentano una astrazione rispetto al blocco dati memorizzato su disco Una pagina dati ha sempre la stessa struttura in memoria All'interno di una pagina dati la singola tupla è acceduta per mezzo di un offset, ma indirettamente per consentire una migliore gestione. E' come se le foglie dell'indice fossere contenuto nella pagina dati stessa! 80 di 139

81 Struttura di una pagina dati Page Header Data pd_lsn pd_tli pd_lower pd_upper pd_special pd_pagesize_version pd_linp[ ] linp0 linp1 linp2 linp3 linp4 linp5... linpn La pagina contiene una serie di puntatori lineari (linear pointer linp) che indirizzano le tuple contenute nella pagina stessa. L'offset della tupla non identifica la tupla stessa, ma il puntatore linp. In questo modo è possibile spostare la tupla (es. compattazione dello spazio) senza doverne cambiare l'offset. pd_lower indica il punto minimo di inizio tuple (ossia dove finiscono i linp), tuplen pd_upper il punto massimo di fine tuplen 1. tuple. Il range delle tuple è quindi. identificato da pd_lower e pd_upper.. Le tuple sono organizzate a stack: ogni tuple0 nuovo tupla viene inserita in fondo Special space subito prima delle altre (crescita verso l'alto) mentre il linp viene inserito all'inizio dopo gli altri (crescita verso 81 di 139

82 pd_lsn: sincronizzazione con il WAL Ogni pagina dati include un campo importante: pd_lsn (Log Sequence Number). Tale campo contiene il valore di segmento del log WAL corrispondente all'ultima transazione che ha toccato la pagina. Questo numero serve a permettere la gestione delle transazioni: la pagina dati può essere scaricata su disco solo dopo che il log WAL è stato scritto almeno fino al segmento indicato dal pd_lsn. Così facendo, il bgwriter è sicuro che in caso di crash la transazione sia stata scritta nel WAL e la pagina possa essere ricreata. 82 di 139

83 Gestione dei buffer Le pagine dati vengono caricate in memoria condivisa in zone dette buffer Ogni processo utente può accedere ai buffer (e quindi alle pagine dati) rispettando alcune regole per evitare corse critiche Siccome portare una pagina da disco ad un buffer richiede tempo, il sistema contiene un flag IO_IN_PROGRESS per indicare che la pagina/buffer sarà presto disponibile 83 di 139

84 Locking dei buffer Ogni buffer contiene due astrazioni utili per il locking, la loro combinazione permette la gestione di piu' casi: Buffer Content Lock: è un lock esplicito di tipo esclusivo, lavora a livello di tupla Page Pin: è un contatore del numero di processi che stanno agendo sulla pagina dati, lavora a livello di pagina I possibili casi sono: Uno scan e un'analisi della visibilità di una tupla richiede un pin e un lock Un Vacuum richiede un pin esclusivo (pin = 1) e un lock esclusivo sulla tupla da cancellare. E' possibile che altri processi prendano il pin nel frattempo (pin > 1) ma non che vedano la tupla o possano iniziare lo scan su di essa E' possibile rilasciare il lock mantenendo il pin (tupla interessata da altro scan). La tupla non può essere rimossa (pin > 1) e se la sua visibilità cambia ciò non rappresenta un problema poiché la visibilità è legata allo scan Cambiare i dati di visibilità XMIN/XMAX richiede un pin e un lock esclusivo, per evitare che altri processi possano fare scan sulla tupla 84 di 139

85 Ottenere un nuovo buffer Ottenere un nuovo buffer risulta facile nel caso ci sia spazio di memoria, mentre richiede di scartare delle pagine qualora la memoria condivisa sia piena. In una simile situazione si procede come segue: Si sceglie un buffer fra quelli disponibili seguendo il puntatore NextVictimBuf (algoritmo clock-skew). Se il buffer ha un pin oppure è stato appena rimosso il suo pin (contatore unpin > 0) allora non può essere scelto, si passa oltre. Se il buffer non ha pin e ha contatore di unpin pari a zero (pin = unpin = 0) allora può essere scaricato: entra in gioco il BackgroundWriter Il BackgroundWriter acquisisce un pin e scrive le pagine su disco 85 di 139

86 Point In Time Recovery 86 di 139

87 Point In Time Recovery (PITR) PostgreSQL può sfruttare i log WAL per effettuare un backup del sistema ad un determinato momento. L'idea è quella di archiviare i log e di indicare al sistema che deve effettuare nuovamente le transazioni archiviate. 0) impostazione del comando di archivio dei log (postgresql.conf): archive_command = 'cp i %p /backup/wal//%f ' 1) informare il database che si inizia il backup: SELECT pg_start_backup('backup_pitr'); 2) archiviazione della directory PGDATA (tar,...) 3) informare il database che il backup è finito: SELECT pg_stop_backup(); 87 di 139

88 PITR: ripristino Una volta in possesso dei log è possibile ordinare al database di fare un re-do delle transazioni: 1) stop del cluster 2) pulizia delle directory del cluster, in particolare pg_xlog 3) copia dei log dentro a pg_xlog 4) creazione di un file recovery.conf nella root del cluster: restore_command = cp /backup/wal/%f "%p" recovery_target_time= :33:59 5) avvio del cluster 88 di 139

89 PITR: esempio Si crea una grossa tabella, si effettua il backup PITR e si cancella la tabella. Si ferma PostgreSQL, si cancellano gli xlog dal backup ripristinato e si crea il file recovery.conf (che sarà poi eliminato automaticamente). 89 di 139

90 PITR: esempio Al riavvio il database trova il file recovery.conf e inizia a ripetere le transazioni presenti nei WAL. Il risultato è che si trovano tutte le tabelle che erano state cancellate! 90 di 139

91 Indici 91 di 139

92 Indici PostgreSQL consente l'utilizzo di diversi tipi di indice, anche lossy (che necessitano di un recheck). Il costo di accesso tramite indice viene effettuato mediante la stima del numero di tuple restituite e dell'operatore applicato, assieme alle statistiche sulle colonne coinvolte costo_indice = costo_seq * num_page_index // costo di acceso indice + (cpu_index_cost + index_tuple_cost) * num_index_tuple // costo di analisi delle tuple indice 92 di 139

93 Indici B-tree: sono il default, vengono usati per query di uguaglianza e range con operatori <, =, >. Su indice multi-colonna solo l'uguaglianza limita le pagine di indice, gli altri operatori vengono rivalutati al volo. Viene usato nel caso di pattern matching solo all'inizio del valore! Bitmap: si costruisce una mappa di bit dove per ogni tupla si indica con un bit se soddisfa (1) o non soddisfa (0) la condizione. Le mappe possono poi essere unite con operatori logici per ridurre il set di risultati velocemente. Hash: utili solo per uguaglianze strette GIST: Generalized Index Search Tree, fornisce una interfaccia per l'integrazione di indici user-defined (es. indici R-Tree, per similarità, ecc.). L'utente deve fornire l'implementazione di 7 funzioni C (consistent, union, picksplit, compress, decompress, same, penalty) GiN: indice inverso per la ricerca full-text (su colonne tsvector). E' più veloce che un generico GiST e non è lossy. Utilizzano una coppia <chiave, posting_list> con i posting_list pointer che puntano ai documenti che contengono la chiave. L'idea è che conviene fare la comparazione sulla chiave che sul documento. 93 di 139

94 Indici in PostgreSQL PostgreSQL memorizza gli indici in modo disgiunto dalla relazione alla quale puntano (indici secondari ) Un indice viene memorizzato e gestito come una normale relazione, e quindi è Presente nel catalogo di sistema Acceduto e gestito dal buffer manager Ogni indice memorizza una coppia <key, TIDs> dove i Tuple Identifier sono coppie <numero_blocco_dati, offset_linp> per recuperare la pagina dati e la tupla all'interno della pagina dati 94 di 139

95 Indici e MVCC A causa di MVCC di una tupla ne possono esistere piu' versioni (teoricamente una valida e le altre espirate o che stanno espirando) L'indice memorizza la chiave comune a tutte le versioni di una tupla e i TID di ogni versione di una tupla Di conseguenza l'indice sa come recuperare ogni versione temporale di una tupla! L'indice non contiene le informazioni di validità di una tupla (XMIN, XMAX, CMIN, CMAX)! 95 di 139

96 Indici e MVCC (2) Perché un indice non contiene le informazioni di visibilità di una tupla? Una tupla potrebbe essere recuperata tramite scansione sequenziale o un altro indice, e quindi le informazioni di visibilità andrebbero replicate per ogni indice (spreco di spazio)! Piu' indici possono essere combinati assieme per ridurre il numero di tuple da recuperare, indipendentemente dalla loro visibilità, e quindi è bene controllare la visibilità delle tuple trovate solo alla fine! La separazione tra indice e informazioni di visibilità può creare alcuni disallineamenti fra indici e tuple: INSERT la tupla viene inserita prima nella pagina dati e poi nell'indice. Ciò significa che non è immediatamente visibile, ma ciò è coerente con il livello di isolamento READ_COMMITTED VACUUM la tupla viene cancellata prima dall'indice, in modo da non essere piu' visibile ad altri processi (resta la scansione sequenziale) 96 di 139

97 Indici e MVCC (3) La separazione fra indice e tuple dati puo' causare una corsa critica nel passaggio (fly) dall'indice al dato (ad esempio se la tupla viene modificata/rimossa da un altro processo) Quando si accede ad una pagina indice si aggiunge un PIN alla pagina dell'indice, così da notificare gli altri processi che le tuple indicizzate non possono essere modificate (si ricordi che Vacuum cancella prima la tupla dall'indice) 97 di 139

98 Cool Features cosa si può fare con PostgreSQL 98 di 139

99 Utilities pg_dump: effettua un dump di un database on-line, producendo un file SQL (eventualmente compresso) che contiene i comandi per la creazione del database, dello schema e dei dati pg_restore: ricostruisce un database, uno schema o i dati partendo da un file di dump vacuumdb: effettua il vacuum su un database reindex: ricostruisce gli indici copy, \copy: bulk loading di grosse moli di dati (il default usato da pg_dump) Initdb: inizializza una directory da usare per il cluster (crea le cartelle pg_clog, pg_xlog, base,...) 99 di 139

100 Cool Features: replicazione Slony: sistema masterslaves Pgpool: replica le modifiche a tutti i nodi, e le interrogazioni a solo un nodo Pgcluster: analizza un cluster e replica le modifiche 100 di 139

101 Cool Features: DBI Link Sviluppato principalmente da David Fetter, implementa parzialmente la specifica di SQL:2003 SQL/MED (Management of External Data). Consente di accedere da un database PostgreSQL a data che risiede in un altro database (anche di tipo diverso) in modo trasparente. Sostanzialmente si effettua una query verso una normale tabella PostgreSQL, che in realtà è collegata ad una fonte dati remota (es. database Oracle). Si basa su Perl, e viene eseguito da PL/Perl. 101 di 139

102 Cool Features: PostGIS PostGIS è un contrib che consente l'utilizzo di sistemi GIS. E' conforme alle specifiche OpenGIS "Simple Features Specification for SQL". Esiste anche un client basato su Eclipse (udig) 102 di 139

103 Cool Features: Full Text Search FTS utilizza i tsvector come tipi di dati sui quali fare le ricerche. Le ricerche vengono specificate tramite l'operatore 103 di 139

104 Cool Features: TOAST TOAST (The Oversized-Attribute Storage Technique) è una tecnica per la memorizzazione trasparente di dati che non possono essere contenuti in una singola riga. L'idea è di dividere il dato largo in pezzi (chunks) che vengono memorizzati off-line in una tabella separata (TOAST-table). Questo viene fatto ogni volta che la compressione del dato non permette la sua memorizzazione in linea. Il sistema ricollega all'esigenza i dati TOAST-ati. TOAST può memorizzare i dati con quattro specifiche: PLAIN: nessuna compressione o off-line, dati non TOAST-abili EXTENDED: compressione e off-line (default) EXTERNAL: no compressione, off-line MAIN: compressione, no off-line (finché c'è spazio) 104 di 139

105 Partitioning (tramite ereditarietà e trigger) 105 di 139

106 Partitioning Il partitioning è una tecnica per la divisione fisica dei dati pur mantenendoli logicamente uniti. L'idea è quella di posizionare dati differenti su supporti fisici (o posizioni) differenti, mantenendo l'accesso ai dati trasparente alla suddivisione dei dati stessi. Ad esempio si immagini di avere una tabella che riassume i movimenti di magazzino. Siccome tale tabella può diventare molto grande nel tempo, è opportuno separare fisicamente i dati in base, ad esempio, alla data cui questi fanno riferimento. 106 di 139

107 Partitioning: esempio di tabella CREATE TABLE movmag ( CREATE TABLE movmag ( movmagpk serial NOT NULL, movmagpk serial NOT NULL, data date, data date, descrizione character varying DEFAULT 20, descrizione character varying DEFAULT 20, qta real ) qta real ) CREATE TABLE movmag2007 ( CREATE TABLE movmag2007 ( Ereditato: movmagpk integer NOT NULL DEFAULT nextval('movmag_movmagpk_seq'::regclass), Ereditato: movmagpk integer NOT NULL DEFAULT nextval('movmag_movmagpk_seq'::regclass), Ereditato: data date, Ereditato: data date, Ereditato: descrizione character varying DEFAULT 20, Ereditato: descrizione character varying DEFAULT 20, Ereditato: qta real, Ereditato: qta real, CONSTRAINT date_2007 CHECK CONSTRAINT date_2007 CHECK (data >= ' '::date AND data <= ' '::date) (data >= ' '::date AND data <= ' '::date) ) INHERITS (movmag) ) INHERITS (movmag) CREATE TABLE movmag2008 ( CREATE TABLE movmag2008 ( Ereditato: movmagpk integer NOT NULL DEFAULT nextval('movmag_movmagpk_seq'::regclass), Ereditato: movmagpk integer NOT NULL DEFAULT nextval('movmag_movmagpk_seq'::regclass), Ereditato: data date, Ereditato: data date, Ereditato: descrizione character varying DEFAULT 20, Ereditato: descrizione character varying DEFAULT 20, Ereditato: qta real, Ereditato: qta real, CONSTRAINT date_2008 CHECK CONSTRAINT date_2008 CHECK (data >= ' '::date AND data <= ' '::date) (data >= ' '::date AND data <= ' '::date) ) INHERITS (movmag) ) INHERITS (movmag) 107 di 139

108 Partitioning con un trigger CREATE OR REPLACE FUNCTION _inserimento_movimento_magazzino() RETURNS trigger AS $BODY$ BEGIN controllo la data di inserimento IF NEW.data >= ' '::date AND NEW.data <= ' ' THEN RAISE INFO 'Inserimento in tabella movimento 2007'; INSERT INTO movmag2007(data, descrizione, qta) VALUES (NEW.data, NEW.descrizione, NEW.qta); non inserisco nulla nella tabella originale RETURN NULL; ELSIF NEW.data >= ' '::date AND NEW.data <= ' '::date THEN RAISE INFO 'Inserimento in tabella movimento 2008'; INSERT INTO movmag2008(data, descrizione, qta) VALUES (NEW.data, NEW.descrizione, NEW.qta); non inserisco nulla nella tabella originaria RETURN NULL; ELSE inserimento nella tabella trash, errore! RAISE WARNING 'Inserimento nella tabella trash, controllare i vincoli!'; INSERT INTO movmag_trash(data, descrizione, qta) VALUES (NEW.data, NEW.descrizione, NEW.qta); non inserisco nulla nella tabella originaria RETURN NULL; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; 108 di 139

109 Funzionamento del trigger CREATE TRIGGER tr_inserimento BEFORE INSERT ON movmag FOR EACH ROW EXECUTE PROCEDURE _inserimento_movimento_magazzino(); 109 di 139

110 Partitioning con una rule CREATE OR REPLACE RULE inserimento_2007 AS ON INSERT TO movmag WHERE new.data >= ' '::date AND new.data <= ' '::date DO INSTEAD INSERT INTO movmag2007 (data, descrizione, qta) VALUES (new.data, new.descrizione, new.qta); CREATE OR REPLACE RULE inserimento_2008 AS ON INSERT TO movmag WHERE new.data >= ' '::date AND new.data <= ' '::date DO INSTEAD INSERT INTO movmag2008 (data, descrizione, qta) VALUES (new.data, new.descrizione, new.qta); In questo caso il trigger non scatta! 110 di 139

111 Partitioning: accesso ai dati Qualunque sia la scelta di partitioning effettuata, l'accesso ai dati è trasparente. Una volta interrogata la tabella movmag PostgreSQL va a cercare fra i dati di tutte le figlie: Vanno generati indici sulle varie tabelle per consentire un accesso ai dati veloce! 111 di 139

112 Explain: capire come lavora l'ottimizzatore 112 di 139

113 EXPLAIN Explain è un comando SQL che consente di analizzare le scelte dell'ottimizzatore per l'esecuzione di una query. Explain si basa sulle statistiche raccolte durante il funzionamento del database; le statistiche possono essere aggiornate anche eseguendo explain analyze. Leggere l'output di explain è un'arte! 113 di 139

114 Explain: primo esempio Il piano di esecuzione indica: Una scansione sequenziale sulla tabella (Seq Scan) La dimensione delle tuple ritornate (152 byte) Il numero di righe ritornate (440!) Il costo iniziale (0.00) e finale del piano (14.40) C'è qualche cosa che non va! 114 di 139

115 Explain: aggiornare le statistiche La tabella talks è stata appena creata, e le sue statistiche non sono aggiornate: l'ottimizzatore ipotizza che ci siano 440 righe al suo interno! Rifacendo il piano di esecuzione con le statistiche aggiornate si ha un valore migliore: 115 di 139

116 Explain per grosse quantità dati Eliminando i vincoli di unicità è possibile duplicare rapidamente le tuple all'interno di una tabella, arrivando fino a 6M tuple. 116 di 139

117 Explain: perché non usa l'indice? 117 di 139

118 Explain: l'ottimizzatore è furbo! La query è una banale SELECT * e quindi si sta chiedendo al database di restituire tutte le tuple della tabella. Non ha senso quindi usare un indice, perché tanto tutte le tuple devono essere restituite senza ordinamento e senza condizioni. La cosa cambia se si inseriscono clausole WHERE o ORDER BY. 118 di 139

119 Explain: utilizzo dell'indice 1) Si parte dal bitmap index scan (perché la condizione è di uguaglianza), quella che ha costo inziiale ) Dalla scansione in indice, si estraggono circa 2M di tuple (vuote senza dimensione si prendono i puntatori) 3) Si ricontrolla la condizione su ogni tupla delle pagine dati e si estraggono le 2M tuple di lunghezza 32 byte 119 di 139

120 Explain: ulteriore esempio Si supponga di aver aggiunto una colonna durata (tipo real) e di averla riempita con dati random. 1) Si parte dal bitmap index scan sulla clausola durata > 0 2) Si applica un filtro in memoria sulla clausola durata < 0.5 3) Si effettua un nuovo scan, questa volta delle tuple in memoria 4) Si effettua un ordinamento delle tuple 120 di 139

121 Explain: ulteriore esempio 1) Si parte dal sequential scan (perché non esiste indice sfruttabile), quella che ha costo inziiale ) Dalla scansione in indice, si estraggono circa 4M di tuple (complete di dati) 3) Si effettua un sort in memoria delle tuple restituite 121 di 139

PostgreSQL - amministrazione

PostgreSQL - amministrazione PostgreSQL - amministrazione ITPUG - Pisa - 08/05/2009 Gabriele Bartolini Flavio Casadei Della Chiesa Luca Ferrari Marco Tofanari Associazione Italiana PostgreSQL Users Group www.itpug.org Pisa, 8 Maggio

Dettagli

Introduzione ORDBMS E. TINELLI LTW A. A. 2011-2012

Introduzione ORDBMS E. TINELLI LTW A. A. 2011-2012 Corso di Laurea Specialistica in Ingegneria Informatica Corso di Linguaggi e Tecnologie Web A. A. 2011 - PostgreSQL Eufemia TINELLI Introduzione PostgreSQL è un ORDBMS (Object Relational Database Management

Dettagli

Introduzione a PostgreSQL e phppgadmin

Introduzione a PostgreSQL e phppgadmin Introduzione a PostgreSQL e phppgadmin Gabriele Pozzani Informatica documentale 2011/2012 Corso di laurea in Scienze della comunicazione PostgreSQL il più avanzato database OpenSource al mondo Sviluppato

Dettagli

PosgreSQL DBA TUNING. Federico Campoli

PosgreSQL DBA TUNING. Federico Campoli PosgreSQL DBA TUNING Federico Campoli PosgreSQL DBA TUNING Federico Campoli Prima Edizione Pubblicato 2007 Copyright 2007 PGHost di Federico Campoli Opera rilasciata sotto licenza Creative Commons - Attribuzione

Dettagli

A. Bardine - Introduzione a PostgreSQL. PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati

A. Bardine - Introduzione a PostgreSQL. PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati Basi di dati PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati PostgreSQL è Open-Source ed il suo sviluppo procede da 15 anni il suo codice sorgente è quindi disponibile

Dettagli

Basi di dati. Introduzione a PostgreSQL. K.Donno - Introduzione a PostgreSQL

Basi di dati. Introduzione a PostgreSQL. K.Donno - Introduzione a PostgreSQL Basi di dati Introduzione a PostgreSQL Introduzione a PostgreSQL PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati PostgreSQL è Open-Source ed il suo sviluppo procede da

Dettagli

Un RDBMS libero: PostgreSQL. Pagina 1

Un RDBMS libero: PostgreSQL. Pagina 1 Un RDBMS libero: PostgreSQL by Federico Campoli Un RDBMS libero: PostgreSQL Pagina 1 Copyright (c) 2004 FEDERICO CAMPOLI - rotellaro@gmail.com Permission is granted to copy, distribute and/or modify this

Dettagli

Basi di Dati Uso di informazioni statistiche e partizionamento delle tabelle per incrementare le performances in PostgreSQL

Basi di Dati Uso di informazioni statistiche e partizionamento delle tabelle per incrementare le performances in PostgreSQL Basi di Dati Uso di informazioni statistiche e partizionamento delle tabelle per incrementare le performances in PostgreSQL di Matteo Bertini Email: matteo@naufraghi.net Web: http://www.slug.it/naufraghi/

Dettagli

Architettura MySQL. E Motori MySQL

Architettura MySQL. E Motori MySQL E Motori MySQL Caratteristiche Differente dagli altri DBMS Non perfetta Ma flessibile Gestisce DataWarehouses, OLTP, ecc. Architettura delle Storage Engine Separa il query processing dai task di memorizzazione

Dettagli

Architettura di storage

Architettura di storage Architettura di storage Architettura di storage 27/11/08 /home/scotty/enrico/corso web/finale/architettura/arch1.odp page 1 Architettura di storage Cluster Databases Tabelle Indici Blocchi 27/11/08 /home/scotty/enrico/corso

Dettagli

Ing. AndreaFortibuoni - PostgreSQL

Ing. AndreaFortibuoni - PostgreSQL Ing. AndreaFortibuoni PostgreSQL PostgreSQL è un ORDBMS (Object Relational Database Management System), ovvero è un sistema di gestione di database relazionali ad oggetti molto noto e molto potente, che

Dettagli

Un RDBMS libero: PostgreSQL Federico Campoli (neo@thezion.net) Un RDBMS libero: PostgreSQL Pagina 1

Un RDBMS libero: PostgreSQL Federico Campoli (neo@thezion.net) Un RDBMS libero: PostgreSQL Pagina 1 Un RDBMS libero: PostgreSQL by Federico Campoli (neo@thezion.net) Un RDBMS libero: PostgreSQL Pagina 1 Generalita' sui database Panoramica su PostgreSQL Installazione database via ricompilazione Amministrazione

Dettagli

Esercitazioni di Basi di Dati

Esercitazioni di Basi di Dati Esercitazioni di Basi di Dati A.A. 2008-09 Dispense del corso Utilizzo base di pgadmin III Lorenzo Sarti sarti@dii.unisi.it PgAdmin III PgAdmin III è un sistema di progettazione e gestione grafica di database

Dettagli

Tool. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A. 2012-2013

Tool. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A. 2012-2013 Tool Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A. 2012-2013 Basi di Dati e Sistemi Informativi () PostgreSQL A.A. 2012-2013 1 / 26 Gli strumenti che vedremo Basi

Dettagli

DBMS (Data Base Management System)

DBMS (Data Base Management System) Cos'è un Database I database o banche dati o base dati sono collezioni di dati, tra loro correlati, utilizzati per rappresentare una porzione del mondo reale. Sono strutturati in modo tale da consentire

Dettagli

PROGRAMMA DI CLASSE 5AI

PROGRAMMA DI CLASSE 5AI Istituto di Istruzione Superiore Euganeo Istituto tecnico del settore tecnologico Istituto professionale del settore servizi socio-sanitari Istituto professionale del settore industria e artigianato PROGRAMMA

Dettagli

Federico Campoli. Postgresql 8.1. Pagina 1

Federico Campoli. Postgresql 8.1. Pagina 1 PostgreSQL 8.1 Gestione e tuning by Federico Campoli Postgresql 8.1 Pagina 1 Sommario Accesso al database (Il file hba_access) Il client psql Tuning dell'istanza (postgresql.conf) L'ottimizzatore a costi

Dettagli

PostgreSQL 8.4. Associazione Italiana PostgreSQL Users Group www.itpug.org. ConfSL 2009 Speaker's Corner Bologna, 13 Giugno 2009

PostgreSQL 8.4. Associazione Italiana PostgreSQL Users Group www.itpug.org. ConfSL 2009 Speaker's Corner Bologna, 13 Giugno 2009 PostgreSQL 8.4 ITPUG - ConfSL 2009 - PostgreSQL 8.4-13 giugno 2009 Gabriele Bartolini gabriele.bartolini@2ndquadrant.it Associazione Italiana PostgreSQL Users Group www.itpug.org ConfSL 2009 Speaker's

Dettagli

APPENDICE. Procedure in SQL (1)

APPENDICE. Procedure in SQL (1) APPENDICE Procedure in SQL Transazioni in SQL Embedded SQL Remote Procedure Call Appendice 1 Procedure in SQL (1) Standard SQL2 permette di definire procedure, associate a singoli comandi SQL, memorizzate

Dettagli

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma Stored Procedures Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma Progetto di Applicazioni Software Stored Procedure e User Defined

Dettagli

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base... 45 Variabili, operatori e commenti... 47 Array...

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base... 45 Variabili, operatori e commenti... 47 Array... Prefazione...xiii A chi si rivolge il libro... xiv Struttura e contenuti del libro... xiv Dove trovare aiuto... xvii Le newsletter di SitePoint... xviii I vostri commenti... xviii Convenzioni adottate

Dettagli

GIS e Geo WEB: piattaforme e architetture. Docente: Cristoforo Abbattista email: abbattista@planetek.it

GIS e Geo WEB: piattaforme e architetture. Docente: Cristoforo Abbattista email: abbattista@planetek.it GIS e Geo WEB: piattaforme e architetture Docente: Cristoforo Abbattista email: abbattista@planetek.it II lezione Componenti e linguaggi GIS e Geo WEB: piattaforme e architetture Conservare in un luogo

Dettagli

Memorizzazione dei dati: Dischi e File

Memorizzazione dei dati: Dischi e File Memorizzazione dei dati: Dischi e File Query\update Query plan Execution Engine richieste di indici, record e file Index/file/record Manager comandi su pagine Query Compiler Buffer Manager Lettura/scrittura

Dettagli

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Data Base. Master Bio Info Reti e Basi di Dati Lezione 6 Data Base 1 Sommario I concetti fondamentali. Database Relazionale.. Query e SQL MySql, Creazione di un db in MySQL con PHPmyAdmin Creazione database e delle Tabelle Query Inserimento Ricerca Modifica

Dettagli

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile 2015. L'Antipasto 11 Marzo

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile 2015. L'Antipasto 11 Marzo The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile 2015 L'Antipasto 11 Marzo Riepilogo della puntata precedente ##################### Avviamo la macchina virtuale #####################

Dettagli

PostgreSQL Point in Time Recovery. Federico Campoli

PostgreSQL Point in Time Recovery. Federico Campoli PostgreSQL Point in Time Recovery Federico Campoli Cos è IWA/HWG IWA/HWG è un Associazione professionale no profit riconosciuta leader mondiale nella fornitura dei principi e delle certificazioni di formazione

Dettagli

DUE GRUPPI DI COMANDI

DUE GRUPPI DI COMANDI LEZIONE16 SQL DDL PAG. 1 / 9 PROF. ANDREA ZOCCHEDDU LEZIONE16 SQL DDL LINGUAGGIO SQL DATA DESCRIPTION LANGUAGE DUE GRUPPI DI COMANDI I comandi del linguaggio SQL sono divisi in due grandi gruppi che formano

Dettagli

Sistemi avanzati di gestione dei Sistemi Informativi

Sistemi avanzati di gestione dei Sistemi Informativi Esperti nella gestione dei sistemi informativi e tecnologie informatiche Sistemi avanzati di gestione dei Sistemi Informativi Docente: Email: Sito: Eduard Roccatello eduard@roccatello.it http://www.roccatello.it/teaching/gsi/

Dettagli

BENEDETTI ALESSANDRO Matricola :252805 PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2

BENEDETTI ALESSANDRO Matricola :252805 PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2 BENEDETTI ALESSANDRO Matricola :252805 PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2 Testo: Sviluppare semplici programmi che permettano di verificare i diversi livelli di isolamento previsti da SQL

Dettagli

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari Gubiani & Montanari Il DBMS Oracle 1 Il DBMS Oracle Express Edition Donatella Gubiani e Angelo Montanari Il DBMS Oracle Il DBMS Oracle Oracle 10g Express Edition Il DBMS Oracle (nelle sue versioni più

Dettagli

Suggerimenti per lo Sviluppo delle Applicazioni con PL/SQL. Simona Rotolo

Suggerimenti per lo Sviluppo delle Applicazioni con PL/SQL. Simona Rotolo Suggerimenti per lo Sviluppo delle Applicazioni con PL/SQL Simona Rotolo 2 Questo documento, rivolto a chi sviluppa codice in PL/Sql, è stato redatto al fine di fornire degli standard di sviluppo che aiuteranno

Dettagli

Indice. settembre 2008 Il File System 2

Indice. settembre 2008 Il File System 2 Il File System Indice 4. Il File System 5. Vantaggi del FS 6. Protezione 7. Condivisione 8. I file - 1 9. I file - 2 10. Attributi dei file 11. Directory 12. Livelli di astrazione - 1 13. Livelli di astrazione

Dettagli

Impararlo è molto semplice, esistono manuali, o meglio mattoni, su SQL, ma qui verranno illustrati tutti i comandi più utilizzati... e utili.

Impararlo è molto semplice, esistono manuali, o meglio mattoni, su SQL, ma qui verranno illustrati tutti i comandi più utilizzati... e utili. Sql è un linguaggio standard che permette di operare con i database. Per database intendo uno qualsiasi e non il solito Access, ma anche Oracle, Microsoft SQL Server, Informix, DB2, Sybase... Sql sta per

Dettagli

Informatica Generale Andrea Corradini. 19 - Sistemi di Gestione delle Basi di Dati

Informatica Generale Andrea Corradini. 19 - Sistemi di Gestione delle Basi di Dati Informatica Generale Andrea Corradini 19 - Sistemi di Gestione delle Basi di Dati Sommario Concetti base di Basi di Dati Il modello relazionale Relazioni e operazioni su relazioni Il linguaggio SQL Integrità

Dettagli

Lezione 8. Metadati, Viste e Trigger

Lezione 8. Metadati, Viste e Trigger Lezione 8 Metadati, Viste e Trigger Pag.1 Metadati e catalogo di sistema I metadati sono dati a proposito dei dati (quali tabelle esistono?, quali campi contengono?, quante tuple contengono?, ci sono vincoli

Dettagli

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF SPARC-CS-12/001 20 Gennaio 2012 Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF Abstract Vengono descritte le procedure di backup e restore dei dati memorizzati in un database di

Dettagli

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE. INFORMATICA Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE. APPLICAZIONI WEB L architettura di riferimento è quella ampiamente diffusa ed

Dettagli

File system. Chiamate di sistema POSIX Esempi: Chiamate di sistema Windows Esempio: Esercizi. 4.3 BSD Linux NTFS. Sistemi Operativi mod B 12.

File system. Chiamate di sistema POSIX Esempi: Chiamate di sistema Windows Esempio: Esercizi. 4.3 BSD Linux NTFS. Sistemi Operativi mod B 12. File system Chiamate di sistema POSIX Esempi: 4.3 BSD Linux Chiamate di sistema Windows Esempio: NTFS Esercizi 12.1 Le chiamate di sistema di UNIX per file UNIX mette a disposizione sia chiamate di sistema

Dettagli

Database: dalla modellazione del dominio all implementazione in PostgreSQL 8.3. Ing. Eufemia Tinelli

Database: dalla modellazione del dominio all implementazione in PostgreSQL 8.3. Ing. Eufemia Tinelli Database: dalla modellazione del dominio all implementazione in PostgreSQL 8.3 Ing. Eufemia Tinelli 1 Argomenti Basi di dati & DBMS Concetti generali e proprietà fondamentali Come si progetta una base

Dettagli

Università Degli Studi Di Milano. PostgreSQL

Università Degli Studi Di Milano. PostgreSQL Università Degli Studi Di Milano PostgreSQL PgAdmin III è il tool visuale più completo per l'amministrazione del RDBMS e dei singoli database. A prima vista può lasciare un po' disorientati (specialmente

Dettagli

L ARCHIVIAZIONE E LA GESTIONE DATI ATTRAVERSO L INTERAZIONE TRA MICROSOFT ACCESS ED EXCEL 1 INTRODUZIONE

L ARCHIVIAZIONE E LA GESTIONE DATI ATTRAVERSO L INTERAZIONE TRA MICROSOFT ACCESS ED EXCEL 1 INTRODUZIONE Roccatello Ing. Eduard L ARCHIVIAZIONE E LA GESTIONE DATI ATTRAVERSO L INTERAZIONE TRA MICROSOFT ACCESS ED EXCEL 1 INTRODUZIONE Agenda Presentazione docente Definizione calendario Questionario pre corso

Dettagli

DB2 Universal Database (UDB) DB2 Universal Database (UDB)

DB2 Universal Database (UDB) DB2 Universal Database (UDB) DB2 Universal Database (UDB) Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DB2Presentazione2009.pdf Sistemi Informativi L-A DB2 Universal

Dettagli

Transazioni. Architettura di un DBMS. Utente/Applicazione. transazioni. Transaction Manager. metadati, statistiche.

Transazioni. Architettura di un DBMS. Utente/Applicazione. transazioni. Transaction Manager. metadati, statistiche. Query/update Query plan Execution Engine richieste di indici, record e file Index/file/record Manager comandi su pagine Query Compiler Buffer Manager Lettura/scrittura pagine Architettura di un DBMS Utente/Applicazione

Dettagli

Lorenzo Sarti sarti@dii.unisi.it Materiale didattico http://www.dii.unisi.it/~ sarti

Lorenzo Sarti sarti@dii.unisi.it Materiale didattico http://www.dii.unisi.it/~ sarti Lorenzo Sarti sarti@dii.unisi.it Materiale didattico http://www.dii.unisi.it/~ sarti Obiettivi esercitazioni Utilizzare nella pratica un DBMS Apprendere il linguaggio SQL Apprendere come si accede ad un

Dettagli

L interfaccia a riga di comando di MySql

L interfaccia a riga di comando di MySql L interfaccia a riga di comando di MySql Una volta completata la procedura di installazione possiamo finalmente testare le funzionalità di MySQL. Sia che ci si trovi in ambiente Linux che Windows, l'interfaccia

Dettagli

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012 Laboratorio Progettazione Web PHP e MySQL - Lezione 9 Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012 Architettura di una applicazione Web Browser Web HTTP Server Web PHP Dati View Control

Dettagli

Informatica B. Contenuti. Introduzione alle Basi di Dati e ai DBMS. Introduzione a dati e basi dati DBMS Modello dei dati

Informatica B. Contenuti. Introduzione alle Basi di Dati e ai DBMS. Introduzione a dati e basi dati DBMS Modello dei dati Informatica B Introduzione alle Basi di Dati e ai DBMS Contenuti Introduzione a dati e basi dati DBMS Modello dei dati Informazioni e dati Dato: elemento semanticamente significativo (data, codice, ecc.),

Dettagli

DBMS ORACLE 9i I componenti del Database Server Oracle : Strutture di memoria Processi File fisici Directory principali: c:\oracle\admin\\pfile c:\oracle\ora92\database

Dettagli

Linux Day 2014 - Montebelluna. Linux Day 2014 - MontelLUG

Linux Day 2014 - Montebelluna. Linux Day 2014 - MontelLUG In Tour con gli Elefanti Linux Day - Montebelluna Linux Day - MontelLUG Prima di partire... Denis Gasparin Senior DBA and Web Developer Sviluppo di soluzioni software basate su PostgreSQL Analista e Database

Dettagli

Il linguaggio SQL: transazioni

Il linguaggio SQL: transazioni Il linguaggio SQL: transazioni Sistemi Informativi T Versione elettronica: 4.8.SQL.transazioni.pdf Cos è una transazione? Una transazione è un unità logica di elaborazione che corrisponde a una serie di

Dettagli

Indice Prefazione... 1 1 SQL Procedurale/SQL-PSM (Persistent Stored Modules)... 3 Vincoli e Trigger... 9

Indice Prefazione... 1 1 SQL Procedurale/SQL-PSM (Persistent Stored Modules)... 3 Vincoli e Trigger... 9 Prefazione... 1 Contenuti... 1 Ringraziamenti... 2 1 SQL Procedurale/SQL-PSM (Persistent Stored Modules)... 3 1.1 Dichiarazione di funzioni e procedure... 3 1.2 Istruzioni PSM... 4 2 Vincoli e Trigger...

Dettagli

Introduzione a PostgreSQL

Introduzione a PostgreSQL Introduzione a PostgreSQL Un po di storia... 1977: all Università di Berkeley nasce progetto INGRES 1986: nasce The POSTGRES Project Leader: Prof. Michael Stonebraker 1989: DBMS Postgres (vers.1) 1990:

Dettagli

Lavorare con MySQL Parte Prima.

Lavorare con MySQL Parte Prima. Lavorare con MySQL Parte Prima. Data la particolarità dell argomento, ho deciso di dividerlo in due lezioni. Nella prima, si parlerà diffusamente di MySQL, cos è un DBMS, cos è l SQL, i campi supportati

Dettagli

07. Ottimizzare le istruzioni SQL

07. Ottimizzare le istruzioni SQL 07. Ottimizzare le istruzioni SQL Introduzione Union, subquery e Join Il piano di esecuzione L ottimizzatore Le statistiche Il comando EXPLAIN Gli Hint A.A. 2005 Laboratorio di basi di dati - LB 2 La UNION

Dettagli

Recovery manager Gestore della affidabilità

Recovery manager Gestore della affidabilità Riferimenti Basi di Dati Complementi Parte 2: Tecnologie per DBMS Parte 2.5: Recovery Manager Trasparenze parte Recovery manager Basi di Dati Atzeni et al. - Capitolo 2.1, 2.2 Anche: Garcia Molina, Ullman,

Dettagli

File system. Realizzazione del file system. Struttura del file system. Struttura del file system. Realizzazione del file system

File system. Realizzazione del file system. Struttura del file system. Struttura del file system. Realizzazione del file system Realizzazione del file system Struttura del file system Metodi di allocazione: Contigua Concatenata Indicizzata Gestione dello spazio libero Realizzazione delle directory Efficienza e prestazioni Ripristino

Dettagli

Laboratorio di Basi di Dati e Web

Laboratorio di Basi di Dati e Web Laboratorio di Basi di Dati e Web Docente: Alberto Belussi Lezione 1 SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali Il linguaggio

Dettagli

1.0.1. PostgreSQL. Il database Open Source piu' avanzato

1.0.1. PostgreSQL. Il database Open Source piu' avanzato 1.0.1 PostgreSQL Il database Open Source piu' avanzato Argomenti trattati Corso PostgreSQL - Modulo Base (NdE questa presentazione!) Introduzione ORDBMS PostgreSQL Architettura SQL etc Tools Storia Argomenti

Dettagli

Sistemi Operativi. Organizzazione logica ed implementazione di un File System

Sistemi Operativi. Organizzazione logica ed implementazione di un File System Modulo di Sistemi Operativi per il corso di Master RISS: Ricerca e Innovazione nelle Scienze della Salute Unisa, 17-26 Luglio 2012 Sistemi Operativi Organizzazione logica ed implementazione di un File

Dettagli

Corso di Informatica Generale 1 IN1. Linguaggio SQL

Corso di Informatica Generale 1 IN1. Linguaggio SQL Università Roma Tre Facoltà di Scienze M.F.N. di Laurea in Matematica di Informatica Generale 1 Linguaggio SQL Marco (liverani@mat.uniroma3.it) Sommario Prima parte: le basi dati relazionali Basi di dati:

Dettagli

Che cos è un DBMS? Capitolo 1. Perché usare un DBMS? DBMS. Descrizioni dei dati nei DBMS. Modelli di dati

Che cos è un DBMS? Capitolo 1. Perché usare un DBMS? DBMS. Descrizioni dei dati nei DBMS. Modelli di dati Che cos è un DBMS? Capitolo 1 Introduzione ai sistemi di basi di dati Una collezione integrata molto grande di dati Modella organizzazioni del mondo reale Entità (ad esempio studenti, corsi) Relazioni

Dettagli

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. (Structured Query Language) : Il linguaggio è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. prima versione IBM alla fine degli anni '70 per un prototipo di ricerca (System

Dettagli

Gestionale Open 9.xx

Gestionale Open 9.xx Gestionale Open 9.xx Per installare Gestionale Open (GO) vanno eseguite le seguenti operazioni: scaricare il file installa_xxx.zip (xxx=versione es. installa_900) da www.gestionaleopen.org scompattare

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 1 SQL SQL (Structured Query Language) è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali. Sono stati proposti

Dettagli

Metodi per la Gestione dei Dati (lezioni di laboratorio)

Metodi per la Gestione dei Dati (lezioni di laboratorio) Università degli Studi di Modena e Reggio Emilia Facoltà di Scienze della Comunicazione e dell Economia Corso di Laurea in Comunicazione e Marketing Titolare del corso: ing. Stefano SETTI Lezioni di laboratorio

Dettagli

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query Costruzione di Sit Web con PHP e MySQL Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query Esercitazione In questa lezione si farà insieme una seconda esercitazione che

Dettagli

GERARCHIE RICORSIVE - SQL SERVER 2008

GERARCHIE RICORSIVE - SQL SERVER 2008 GERARCHIE RICORSIVE - SQL SERVER 2008 DISPENSE http://dbgroup.unimo.it/sia/gerarchiericorsive/ L obiettivo è quello di realizzare la tabella di navigazione tramite una query ricorsiva utilizzando SQL SERVER

Dettagli

Esercitazione: Il DBMS MySQL

Esercitazione: Il DBMS MySQL Laurea in Ingegneria Informatica SAPIENZA Università di Roma Insegnamento di Basi di Dati Esercitazione: Il DBMS MySQL Marco Console Aspetti Organizzativi Marco Console Sito: www.dis.uniroma1.it/~console

Dettagli

SICR@WEB SICR@WEB - & POSTGRESQL. Il presente documento comprende la procedura di prima installazione di Postgres (e altre nozioni di base).

SICR@WEB SICR@WEB - & POSTGRESQL. Il presente documento comprende la procedura di prima installazione di Postgres (e altre nozioni di base). SICR@WEB SICR@WEB - & POSTGRESQL Il presente documento comprende la procedura di prima installazione di Postgres (e altre nozioni di base). SICR@WEB PRIMA INSTALLAZIONE Revisioni Data Modifiche Versione

Dettagli

Un introduzione. Sistemi Informativi LM d'agostino, Fornari, Leardini

Un introduzione. Sistemi Informativi LM d'agostino, Fornari, Leardini Un introduzione Sistemi Informativi LM d'agostino, Fornari, Leardini 1 L utilizzo di MySQL Sistemi Informativi LM d'agostino, Fornari, Leardini 2 L utilizzo di MySQL Sistemi Informativi LM d'agostino,

Dettagli

Transazioni - Parte 1

Transazioni - Parte 1 Basi di dati II Lezione 3 09/10/2008 Caputo Domenico Cosimo, Francesco Pichierri Transazioni - Parte 1 Le transazioni hanno a che fare con la programmabilità delle basi di dati. Prima di trattarle è necessaria

Dettagli

SQL (STRUCTURED QUERY LANGUAGE)

SQL (STRUCTURED QUERY LANGUAGE) SQL (STRUCTURED QUERY LANGUAGE) Prof. Nicoletta D Alpaos & Prof. Andrea Borghesan SQL DDL Data Definition Language DML Data Manipulation Language DCL Data Control Language DDL Obiettivo: Definire la struttura

Dettagli

File System Distribuiti

File System Distribuiti File System Distribuiti Introduzione Nominazione e Trasparenza Accesso ai File Remoti Servizio Con/Senza Informazione di Stato Replica dei File Un esempio di sistema 20.1 Introduzione File System Distribuito

Dettagli

Introduzione. File System Distribuiti. Nominazione e Trasparenza. Struttura dei DFS. Strutture di Nominazione

Introduzione. File System Distribuiti. Nominazione e Trasparenza. Struttura dei DFS. Strutture di Nominazione File System Distribuiti Introduzione Nominazione e Trasparenza Accesso ai File Remoti Servizio Con/Senza Informazione di Stato Replica dei File Un esempio di sistema Introduzione File System Distribuito

Dettagli

SQL IL LINGUAGGIO DI INTERROGAZIONE

SQL IL LINGUAGGIO DI INTERROGAZIONE SQL IL LINGUAGGIO DI INTERROGAZIONE SQL! Originato da SEQUEL-XRM e System-R (1974-1977) dell IBM! Significato originario Structured Query Language! Standard de facto! Attuale standard ANSI/ISO è SQL:1999

Dettagli

Introduzione al linguaggio SQL

Introduzione al linguaggio SQL Introduzione al linguaggio SQL Structured Query Language (Linguaggio Strutturato di Interrogazione di Database) prof. Cleto Azzani IPSIA MORETTO BRESCIA (2004) Che cos è un Data Base (Base di dati) Insieme

Dettagli

Implementazione del File System

Implementazione del File System Implementazione del file system Implementazione del File System Struttura del file system. Realizzazione del file system. Implementazione delle directory. Metodi di allocazione. Gestione dello spazio libero.

Dettagli

Realizzazione del file system

Realizzazione del file system Realizzazione del file system Struttura del file system Metodi di allocazione: Contigua Concatenata Indicizzata Gestione dello spazio libero Realizzazione delle directory Efficienza e prestazioni Ripristino

Dettagli

Indici basati su alberi

Indici basati su alberi Query\update Query plan Execution Engine richieste di indici, record e file Index/file/record Manager comandi su pagine Lettura/scrittura pagine Architettura di un DBMS Utente/Applicazione Query Compiler

Dettagli

File e indici. Tecnologia delle BD: perché studiarla? Le basi di dati sono grandi e persistenti. DataBase Management System DBMS

File e indici. Tecnologia delle BD: perché studiarla? Le basi di dati sono grandi e persistenti. DataBase Management System DBMS 1 Tecnologia delle BD: perché studiarla? File e indici I DBMS offrono i loro servizi in modo "trasparente": per questo abbiamo potuto finora ignorare molti aspetti realizzativi abbiamo considerato il DBMS

Dettagli

OR true null false true true true true null true null null false true null false NOT

OR true null false true true true true null true null null false true null false NOT Il linguaggio SQL è un linguaggio standard per la definizione, manipolazione e interrogazione delle basi di dati relazionali ed ha le seguenti caratteristiche: è dichiarativo; opera su multiset di tuple,

Dettagli

Corso di Laboratorio di Basi di Dati

Corso di Laboratorio di Basi di Dati Corso di Laboratorio di Basi di Dati F1I072 - INF/01 a.a 2009/2010 Pierluigi Pierini Technolabs S.p.a. Pierluigi.Pierini@technolabs.it Università degli Studi di L Aquila Dipartimento di Informatica Technolabs

Dettagli

SQL (STRUCTURED QUERY LANGUAGE)

SQL (STRUCTURED QUERY LANGUAGE) SQL (STRUCTURED QUERY LANGUAGE) Prof. Nicoletta D Alpaos & Prof. Andrea Borghesan SQL DDL Data Definition Language DML Data Manipulation Language DCL Data Control Language DDL Obiettivo: Definire la struttura

Dettagli

Esercitazione 8. Basi di dati e web

Esercitazione 8. Basi di dati e web Esercitazione 8 Basi di dati e web Rev. 1 Basi di dati - prof. Silvio Salza - a.a. 2014-2015 E8-1 Basi di dati e web Una modalità tipica di accesso alle basi di dati è tramite interfacce web Esiste una

Dettagli

Oracle Solaris Studio 12.4: Guida per la sicurezza

Oracle Solaris Studio 12.4: Guida per la sicurezza Oracle Solaris Studio 12.4: Guida per la sicurezza N. di parte: E60509 Ottobre 2014 Copyright 2013, 2014, Oracle e/o relative consociate. Tutti i diritti riservati. Il software e la relativa documentazione

Dettagli

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date; CREAZIONE STRUTTURA DI UNA TABELLA by Marinsalta Fausto CREATE TABLE Personale Matricola char(5), Cognome char(30), Nome char(20), Codfis char(16) not null, Assunzione date, Filiale smallint, Funzione

Dettagli

Oracle PL/SQL. Motivazioni

Oracle PL/SQL. Motivazioni Oracle PLSQL Motivazioni Supponiamo che nella gestione del database Azienda ci venga chiesto di apportare le modifiche necessarie a far sì che ad ogni impiegato possa essere assegnato, alla fine di ogni

Dettagli

La memoria virtuale. La gerarchia di memorie. Indirizzo fisico. Memoria virtuale. Architetture Avanzate dei Calcolatori. Valeria Cardellini

La memoria virtuale. La gerarchia di memorie. Indirizzo fisico. Memoria virtuale. Architetture Avanzate dei Calcolatori. Valeria Cardellini La memoria Architetture Avanzate dei Calcolatori Valeria Cardellini Nelle lezioni precedenti { Memoria La gerarchia di memorie Registri Istruzioni, operandi L Cache Blocchi L2 Cache Blocchi Memoria Pagine

Dettagli

Ap Camp: 15/10/2011. Postgresql Binary Streaming ReplicationR. www.pgtraining.com Enrico Pirozzi

Ap Camp: 15/10/2011. Postgresql Binary Streaming ReplicationR. www.pgtraining.com Enrico Pirozzi Ap Camp: 15/10/2011 Postgresql Binary Streaming ReplicationR www.pgtraining.com Enrico Pirozzi Agenda Ha: High Availability Agenda Ha: High Availability Hot Backup - P.I.T.R. : Point in time recovery Agenda

Dettagli

III.2 Come condividere risultati

III.2 Come condividere risultati III.2 Come condividere risultati Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Ottobre 6, 2015 Argomenti 1 Di cosa si tratta Tipologie 2 Ai fine del progetto Comandi

Dettagli

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia: Corso di Basi di Dati Spaziali Linguaggi: SQL Angelo Montanari Donatella Gubiani Storia Storia: 1974: prima proposta SEQUEL 1981: prime implementazioni 1983: standard di fatto 1986, 1989, 1992 e 1999:

Dettagli

MySQL Command Line Client: operazioni fondamentali

MySQL Command Line Client: operazioni fondamentali MySQL Command Line Client: operazioni fondamentali INTRODUZIONE Il RDBMS MySQL, oltre a fornire un applicazione che abbia un interfaccia user-friendly, ha a disposizione anche un altro client, che svolge

Dettagli

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL Basi di dati Il Linguaggio SQL Data Definition Language (DDL) Data Definition Language: insieme di istruzioni utilizzate per modificare la struttura della base di dati Ne fanno parte le istruzioni di inserimento,

Dettagli

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE Pag. 1/1 Sessione ordinaria 2010 Seconda prova scritta Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO DI ORDINAMENTO Indirizzo: INFORMATICA

Dettagli

PHP e Structured Query Language

PHP e Structured Query Language Esercitazioni del corso di Tecnologie per la Comunicazione Aziendale PHP e Structured Query Language Marco Loregian loregian@disco.unimib.it www.siti.disco.unimib.it/didattica/tca2008 Interrogazioni (ripasso)

Dettagli

Le risposte alle domande a fine capitolo

Le risposte alle domande a fine capitolo Appendice A Le risposte alle domande a fine capitolo Capitolo 1 ORACLE: LA SOCIETÀ E IL SOFTWARE 1. Oracle è stata fondata da Larry Ellison, Bob Miner e. D. Ed Oates 2. In quale anno Oracle ha fornito

Dettagli

FileMaker 12. Guida ODBC e JDBC

FileMaker 12. Guida ODBC e JDBC FileMaker 12 Guida ODBC e JDBC 2004 2012 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker e Bento sono marchi di FileMaker, Inc.

Dettagli

TRANSAZIONI DISTRIBUITE TRANSAZIONI

TRANSAZIONI DISTRIBUITE TRANSAZIONI TRANSAZIONI DISTRIBUITE Transazioni distribuite Atomicità di una transazione distribuita Protocollo Two-Phase Commit Gestione dell affidabilità Fallimenti durante il 2PC Gestione della concorrenza Serializzabilità

Dettagli

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Vincoli di Integrità Approccio dichiarativo alla loro implementazione Vincoli di Integrità Approccio dichiarativo alla loro implementazione Antonella Poggi Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma Progetto di Applicazioni Software Anno accademico

Dettagli