SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Jak optymalizować bazy danych
   w aplikacjach internetowych.
   Na przykładzie PostgreSQL.


                   Wojciech Bublik
O Empathy
Internet Software House




   2000
  rok założenia


   30 osób
  zatrudnienie




                          www.empathy.pl
O czym będę mówił?

1.   Tuning konfiguracji serwera

2.   O czym powinni pamiętać programiści

3.   Optymalizacja zapytań na podstawie
     analizy bazy danych

4.   Inne możliwości optymalizacji…


                                           www.empathy.pl
Tuning konfiguracji serwera

postgresql.conf
max_connections
shared_buffers
temp_buffers
max_prepared_transactions
work_mem
maintenance_work_mem
checkpoint_segments
effective_cache_size



                              www.empathy.pl
Tuning konfiguracji serwera

Konfiguracja systemu: /etc/sysctl.conf
http://www.postgresql.org/docs/8.3/interactive/kernel-resources.html


kern.ipc.shmall
kern.ipc.shmmax
kern.ipc.semmap




                                                                       www.empathy.pl
Tuning konfiguracji serwera

Konfiguracja sprzętowa
 1.   Szybkie dyski twarde – duży cache, RAID
 2.   Wiele procesorów – każde połączenie to oddzielny
      proces
 3.   Duża ilość pamięci RAM




                                                    www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

1.   Indeksy
     CREATE INDEX idx_test1
       ON mtcs_attributes
       (fk_attribute_class_id);

     CREATE INDEX idx_test2
       ON opr_cttrx
       (ctt_amnt, ctt_sysdate)
       WITH (fillfactor = 70);

     CREATE INDEX idx_test3
       ON opr_pptrx
       USING btree
       (ppt_date)
       WHERE ppt_acc = 5504100;


                                      www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

2.   Pola w wynikach zapytania




                                      www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

3.    Minimalizowanie ilości zapytań SQL
1. SELECT true FROM eicrm_company WHERE cmp_id = 1234;

     UPDATE eicrm_company
     SET cmp_name = ‘xyz’, cmp_short_name = ‘xyz’
     WHERE cmp_id = 1234;

     INSERT INTO eicrm_company (cmp_name, cmp_short_name)
     VALUES (‘xyz’,’xyz’);

2. UPDATE eicrm_company
   SET cmp_name = ‘xyz’, cmp_short_name = ‘xyz’
   WHERE cmp_id = 1234
   RETURNING cmp_id;

     INSERT INTO eicrm_company (cmp_name, cmp_short_name)
     VALUES (‘xyz’,’xyz’) RETURNING cmp_id;
                                                         www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

3.       Przetwarzanie dużych ilości danych
     •      Transakcje,
     •      Prepared Statements,
     •      Multi-row insert,
     •      Copy




                                              www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

4.       Postać normalna? Nie za wszelką cenę.

     CREATE TABLE eicrm_company
     (
       cmp_id serial NOT NULL,
       cmp_short_name character varying(64) NOT NULL,
       cmp_name character varying(256) NOT NULL,
       cmp_nip character varying(10)
     );                               CREATE TABLE eicrm_phone
                                             (
     CREATE TABLE eicrm_address                 phn_id serial NOT NULL,
     (                                          phn_cmp_id integer,
       adr_id serial NOT NULL,                  phn_no character varying(16),
       adr_cmp_id integer,                      phn_type smallint,
       adr_street character varying(256),     );
       adr_street_no integer,                          CREATE TABLE eicrm_www
       adr_street_place_no character varying(8),       (
       adr_city character varying(256),                  www_id serial NOT NULL,
       adr_postal_code character varying(6)              www_cmp_id integer,
     );                                                  www_address character varying(64)
                                                       );
                                                                              www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

5.   Widoki
•    Przejrzystość zapytań SQL
•    Pomocnicza warstwa logiki w bazie danych
•    Możliwość optymalizacji zapytań bez zmian w kodzie
     aplikacji
•    Możliwość konwersji na zmaterializowane widoki




                                                      www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

6.      Warto próbować różnych sposobów
COST: 8173 CZAS WYKONANIA: 108 ms

SELECT eis_product_group.pgr_id, max(eis_product_group.pgr_name)
FROM eis_product_group
LEFT OUTER JOIN tmp_prd_list_view ON (eis_product_group.pgr_id = tmp_prd_list_view.pgr_id)
GROUP BY eis_product_group.pgr_id HAVING count(tmp_prd_list_view.pgr_id) > 0


COST: 9940 CZAS WYKONANIA: 108 ms

SELECT DISTINCT eis_product_group.pgr_id, eis_product_group.pgr_name
FROM eis_product_group
INNER JOIN tmp_prd_list_view ON (eis_product_group.pgr_id = tmp_prd_list_view.pgr_id)


COST: 9340 CZAS WYKONANIA: 108 ms

SELECT eis_product_group.pgr_id, eis_product_group.pgr_name
FROM eis_product_group
WHERE pgr_id IN (SELECT DISTINCT pgr_id FROM tmp_prd_list_view)




                                                                                 www.empathy.pl
Optymalizacja zapytań
O czym programiści powinni pamiętać

6.      Warto próbować różnych sposobów
COST: 14 CZAS WYKONANIA: 13 ms

SELECT
eis_product_group.pgr_id, eis_product_group.pgr_name
FROM eis_product_group
WHERE pgr_id IN (SELECT pgr_id FROM tmp_prd_list_view)


COST: 89 CZAS WYKONANIA: 21 ms

SELECT eis_product_group.pgr_id, eis_product_group.pgr_name
FROM eis_product_group
WHERE
EXISTS
(SELECT 1 FROM tmp_prd_list_view WHERE tmp_prd_list_view.pgr_id = eis_product_group.pgr_id)




                                                                                 www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych


Analiza bazy danych
1.   Analiza statystyk serwera
     track_counts (stats_start_collector, stats_row_level),
     pg_stat_user_tables, pg_stat_user_indexes



2.   Analiza logów

     log_min_duration_statement,   pgFouine




                                                     www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych


Analiza statystyk serwera
postgresql.conf:
track_counts (stats_start_collector, stats_row_level)


SELECT * FROM pg_stat_user_tables;


SELECT * FROM pg_stat_user_indexes;




                                                        www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych - analiza statystyk serwera




                                                  www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych - analiza statystyk serwera




                                                  www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych


Analiza logów serwera
postgresql.conf:
log_statement, log_min_duration_statement




                                            www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych - analiza logów serwera




pgFouine (http://pgfouine.projects.postgresql.org)
php pgfouine.php -file postgresql.log > sample_default.html




                                                              www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych - analiza logów serwera




                                              www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych - analiza logów serwera




                                              www.empathy.pl
Optymalizacja zapytań
Analiza bazy danych - analiza logów serwera




                                              www.empathy.pl
Optymalizacja zapytań
Explain, przykład optymalizacji SQL

SELECT
eicrm_user.usr_id, eicrm_user.usr_status, eicrm_user.usr_fname, eicrm_user.usr_lname,
eicrm_user.usr_street_prefix, eicrm_user.usr_street, eicrm_user.usr_street_no,
eicrm_user.usr_street_place_no, eicrm_user.usr_city, eicrm_user.usr_postal_code,
eicrm_user.usr_post, eicrm_user.usr_email, eicrm_user.usr_phone_no,
eicrm_user.usr_mobilephone_no, eicrm_user_type.utp_name,eicrm_company.cmp_city,
eicrm_company.cmp_street, eicrm_company.cmp_name,
(
SELECT pnc_name FROM eicrm_province WHERE eicrm_user.usr_pnc_id = eicrm_province.pnc_id
) as pnc_name

FROM eicrm_user
  JOIN eicrm_user_user_type   ON eicrm_user_user_type.uut_usr_id = eicrm_user.usr_id
  JOIN eicrm_user_type        ON eicrm_user_user_type.uut_utp_id = eicrm_user_type.utp_id
  LEFT OUTER JOIN eicrm_user_company    ON eicrm_user_company.ucm_usr_id = eicrm_user.usr_id
  LEFT OUTER JOIN eicrm_company ON eicrm_company.cmp_id = eicrm_user_company.ucm_cmp_id

WHERE

eicrm_user_user_type.uut_utp_id = 13 AND
eicrm_user.usr_lname = 'Kowalski' AND
eicrm_user.usr_city = 'Kraków'

LIMIT 100



                                                                                www.empathy.pl
Optymalizacja zapytań
Explain, przykład optymalizacji SQL
Bez warunków, bez limit 100




                                      www.empathy.pl
Optymalizacja zapytań
Explain, przykład optymalizacji SQL
Bez warunków, z limit 100




                                      www.empathy.pl
Optymalizacja zapytań
Explain, przykład optymalizacji SQL
Z warunkami
eicrm_user.usr_lname = 'Kowalski'
eicrm_user.usr_city = 'Kraków'
bez indeksu na warunkach




                                      www.empathy.pl
Optymalizacja zapytań
Explain, przykład optymalizacji SQL
Z warunkami
eicrm_user.usr_lname = 'Kowalski'
eicrm_user.usr_city = 'Kraków'
z indeksem usr_lname, usr_city




                                      www.empathy.pl
Optymalizacja zapytań
Explain, przykład optymalizacji SQL
Z warunkami
eicrm_user.usr_lname = 'Kowalski'
eicrm_user.usr_city = 'Kraków'
z indeksami usr_lname oraz usr_city




                                      www.empathy.pl
Optymalizacja zapytań
    Inne możliwości optymalizacji


Zmaterializowane widoki
http://tech.jonathangardner.net/wiki/PostgreSQL/Materialized_Views


•       Tabela na podstawie wyników zapytania SQL zawierająca snapshot danych
•       Odświeżana cyklicznie lub z poziomu triggerów w tabelach
•       Możliwości indeksowania zmaterializowanego widoku
•       Proste i skuteczne rozwiązanie dające bardzo duży wzrost wydajności
•       Zagrożenia! Kopia nie odzwierciedla aktualnego stanu bazy danych.



                                                                     www.empathy.pl
Optymalizacja zapytań
 Inne możliwości optymalizacji


Partycjonowanie tabel
constraint_exclusion = on


  •     Podział dużej tabeli na wiele mniejszych
  •     Bardzo duży wzrost wydajności zapytań – zapytania skierowane na tabele
        z odpowiednim fragmentem danych
  •     Ułatwione zarządzanie danymi – przechowywanie danych na wielu tablespace
  •     Niezależne blokowanie tabel
  •     Brak unikalności klucza głównego



                                                                        www.empathy.pl
Optymalizacja zapytań
 Inne możliwości optymalizacji


Partycjonowanie tabel                        CREATE TABLE opr_okktr_201001
                                             (
CREATE TABLE opr_okktr                         CONSTRAINT opr_okktr_201001_date_check
(                                              CHECK (
   okk_id serial NOT NULL,                        okk_date >= '2010-01-01'::date
   okk_trnref character varying(25),              AND
   okk_date date NOT NULL,                        okk_date < '2010-02-01'::date
   okk_datelocal date,                          )
   okk_crdno character varying(19),          ) INHERITS (opr_okktr);
   okk_acc bigint NOT NULL,
   okk_amnt numeric(14,2),
   okk_curr_id smallint,                     CREATE TABLE opr_okktr_201002
   okk_amntset numeric(14,2),                (
   okk_currset_id smallint,                    CONSTRAINT opr_okktr_201002_date_check
   okk_dateset date,                           CHECK (
   okk_amntbill numeric(14,2),                    okk_date >= '2010-02-01'::date
   okk_currbill_id smallint,                      AND
   okk_ctt_id integer,                            okk_date < '2010-03-01'::date
   okk_ref text,                                )
   CONSTRAINT okk_id PRIMARY KEY (okk_id),   ) INHERITS (opr_okktr);
);
                                                                         www.empathy.pl
Optymalizacja zapytań
 Inne możliwości optymalizacji


Partycjonowanie tabel
CREATE OR REPLACE RULE opr_okktr_ins201001 AS
    ON INSERT TO opr_okktr
   WHERE
    new.okk_date >= '2010-01-01'::date AND new.okk_date < '2010-02-01'::date

DO INSTEAD

INSERT INTO opr_okktr_201001
 (okk_id, okk_trnref, okk_date, okk_datelocal, okk_crdno, okk_acc, okk_amnt,
 okk_curr_id, okk_amntset, okk_currset_id, okk_dateset, okk_amntbill,
 okk_currbill_id, okk_ctt_id, okk_ref)
VALUES
 (new.okk_id, new.okk_trnref, new.okk_date, new.okk_datelocal, new.okk_crdno,
 new.okk_acc, new.okk_amnt, new.okk_curr_id, new.okk_amntset, new.okk_currset_id,
 new.okk_dateset, new.okk_amntbill, new.okk_currbill_id, new.okk_ctt_id,
 new.okk_ref);



                                                                      www.empathy.pl
Optymalizacja zapytań
 Inne możliwości optymalizacji


Partycjonowanie tabel




                                 www.empathy.pl
Optymalizacja zapytań
 Inne możliwości optymalizacji


Partycjonowanie tabel




                                 www.empathy.pl
Gdzie nas znaleźć
Nasz blog




            www.imagineblog.pl


                                 www.empathy.pl
Konkurs
     Facebook




1.        Wejdź na
          www.empathy.pl/facebook
2.        „Polub” naszą stronę
3.        Skomentuj wpis ze
          zdjęciem z Tech.Spodka
4.        Hasło: „Konkurs”
5.        Wygraj nagrodę:)

                                    www.empathy.pl
Dziękuję :)

w.bublik@empathy.pl
   www.empathy.pl

Más contenido relacionado

Similar a Empathy optymalizacja postgre_sql

Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiLogicaltrust pl
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationMariusz Koprowski
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegroallegro.tech
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
Podkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. ĆwiczeniaPodkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. ĆwiczeniaWydawnictwo Helion
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
[#3] in memory - IBM Integrated Analytics System
[#3] in memory - IBM Integrated Analytics System[#3] in memory - IBM Integrated Analytics System
[#3] in memory - IBM Integrated Analytics SystemArtur Wronski
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychMarcin Jasiński
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiastosecman_pl
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Obsługa klienta z wykorzystaniem sztucznej inteligencji
Obsługa klienta z wykorzystaniem sztucznej inteligencjiObsługa klienta z wykorzystaniem sztucznej inteligencji
Obsługa klienta z wykorzystaniem sztucznej inteligencji2040.io
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery WindowsWydawnictwo Helion
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Semihalf
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 

Similar a Empathy optymalizacja postgre_sql (20)

Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
Podkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. ĆwiczeniaPodkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. Ćwiczenia
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
[#3] in memory - IBM Integrated Analytics System
[#3] in memory - IBM Integrated Analytics System[#3] in memory - IBM Integrated Analytics System
[#3] in memory - IBM Integrated Analytics System
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów Sparkowych
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
EXADATA - Infrastruktura Przyszłości
EXADATA - Infrastruktura PrzyszłościEXADATA - Infrastruktura Przyszłości
EXADATA - Infrastruktura Przyszłości
 
Obsługa klienta z wykorzystaniem sztucznej inteligencji
Obsługa klienta z wykorzystaniem sztucznej inteligencjiObsługa klienta z wykorzystaniem sztucznej inteligencji
Obsługa klienta z wykorzystaniem sztucznej inteligencji
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 

Más de Spodek 2.0

Rentowna strona ecommerce przy 20 użytkownikach dziennie
Rentowna strona ecommerce przy 20 użytkownikach dziennieRentowna strona ecommerce przy 20 użytkownikach dziennie
Rentowna strona ecommerce przy 20 użytkownikach dziennieSpodek 2.0
 
Pozyskiwanie inwestora na przykładzie ServeCloud.pl
Pozyskiwanie inwestora na przykładzie ServeCloud.plPozyskiwanie inwestora na przykładzie ServeCloud.pl
Pozyskiwanie inwestora na przykładzie ServeCloud.plSpodek 2.0
 
Marketingowy geniusz Lady GaGi
Marketingowy geniusz Lady GaGiMarketingowy geniusz Lady GaGi
Marketingowy geniusz Lady GaGiSpodek 2.0
 
Skalowalna architektura na przykładzie soccerway.com
Skalowalna architektura na przykładzie soccerway.comSkalowalna architektura na przykładzie soccerway.com
Skalowalna architektura na przykładzie soccerway.comSpodek 2.0
 
Co internet namieszał w budowaniu marki, czyli jak tworzyć fanbojów
Co internet namieszał w budowaniu marki, czyli jak tworzyć fanbojówCo internet namieszał w budowaniu marki, czyli jak tworzyć fanbojów
Co internet namieszał w budowaniu marki, czyli jak tworzyć fanbojówSpodek 2.0
 
Usability - narzędzia niskobudżetowe, z których warto i nie warto korzystać
Usability - narzędzia niskobudżetowe, z których warto i nie warto korzystaćUsability - narzędzia niskobudżetowe, z których warto i nie warto korzystać
Usability - narzędzia niskobudżetowe, z których warto i nie warto korzystaćSpodek 2.0
 
Obowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowych
Obowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowychObowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowych
Obowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowychSpodek 2.0
 
NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?
NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?
NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?Spodek 2.0
 
Startup School okiem uczestnika. O 3 miesiącach pracy nad Animili
Startup School okiem uczestnika. O 3 miesiącach pracy nad AnimiliStartup School okiem uczestnika. O 3 miesiącach pracy nad Animili
Startup School okiem uczestnika. O 3 miesiącach pracy nad AnimiliSpodek 2.0
 
AdTaily - twórz, dziel się, zarabiaj
AdTaily - twórz, dziel się, zarabiajAdTaily - twórz, dziel się, zarabiaj
AdTaily - twórz, dziel się, zarabiajSpodek 2.0
 
[spodek 2.0] Tworzenie prototypów serwisów internetowych
[spodek 2.0] Tworzenie prototypów serwisów internetowych[spodek 2.0] Tworzenie prototypów serwisów internetowych
[spodek 2.0] Tworzenie prototypów serwisów internetowychSpodek 2.0
 
[spodek 2.0] Erlang
[spodek 2.0] Erlang[spodek 2.0] Erlang
[spodek 2.0] ErlangSpodek 2.0
 
[spodek 2.0] ligspace.pl
[spodek 2.0] ligspace.pl[spodek 2.0] ligspace.pl
[spodek 2.0] ligspace.plSpodek 2.0
 
[spodek 2.0] Prototypowanie
[spodek 2.0] Prototypowanie[spodek 2.0] Prototypowanie
[spodek 2.0] PrototypowanieSpodek 2.0
 
[spodek 2.0] Pierwsze ząbki
[spodek 2.0] Pierwsze ząbki[spodek 2.0] Pierwsze ząbki
[spodek 2.0] Pierwsze ząbkiSpodek 2.0
 
Jak Google pomaga nam dbać o jakość stron WWW?
Jak Google pomaga nam dbać o jakość stron WWW?Jak Google pomaga nam dbać o jakość stron WWW?
Jak Google pomaga nam dbać o jakość stron WWW?Spodek 2.0
 
Przeznaczenie technologii Flex i Adobe AIR
Przeznaczenie technologii Flex i Adobe AIRPrzeznaczenie technologii Flex i Adobe AIR
Przeznaczenie technologii Flex i Adobe AIRSpodek 2.0
 
Internet salonem dla fotografii mody
Internet salonem dla fotografii modyInternet salonem dla fotografii mody
Internet salonem dla fotografii modySpodek 2.0
 
Między spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanego
Między spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanegoMiędzy spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanego
Między spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanegoSpodek 2.0
 
Blogvertising.pl przed i zaraz po inwestycji
Blogvertising.pl przed i zaraz po inwestycjiBlogvertising.pl przed i zaraz po inwestycji
Blogvertising.pl przed i zaraz po inwestycjiSpodek 2.0
 

Más de Spodek 2.0 (20)

Rentowna strona ecommerce przy 20 użytkownikach dziennie
Rentowna strona ecommerce przy 20 użytkownikach dziennieRentowna strona ecommerce przy 20 użytkownikach dziennie
Rentowna strona ecommerce przy 20 użytkownikach dziennie
 
Pozyskiwanie inwestora na przykładzie ServeCloud.pl
Pozyskiwanie inwestora na przykładzie ServeCloud.plPozyskiwanie inwestora na przykładzie ServeCloud.pl
Pozyskiwanie inwestora na przykładzie ServeCloud.pl
 
Marketingowy geniusz Lady GaGi
Marketingowy geniusz Lady GaGiMarketingowy geniusz Lady GaGi
Marketingowy geniusz Lady GaGi
 
Skalowalna architektura na przykładzie soccerway.com
Skalowalna architektura na przykładzie soccerway.comSkalowalna architektura na przykładzie soccerway.com
Skalowalna architektura na przykładzie soccerway.com
 
Co internet namieszał w budowaniu marki, czyli jak tworzyć fanbojów
Co internet namieszał w budowaniu marki, czyli jak tworzyć fanbojówCo internet namieszał w budowaniu marki, czyli jak tworzyć fanbojów
Co internet namieszał w budowaniu marki, czyli jak tworzyć fanbojów
 
Usability - narzędzia niskobudżetowe, z których warto i nie warto korzystać
Usability - narzędzia niskobudżetowe, z których warto i nie warto korzystaćUsability - narzędzia niskobudżetowe, z których warto i nie warto korzystać
Usability - narzędzia niskobudżetowe, z których warto i nie warto korzystać
 
Obowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowych
Obowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowychObowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowych
Obowiązki przedsiębiorcy internetowego w zakresie ochrony danych osobowych
 
NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?
NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?
NGN są na Śląsku! ...ale gdzie są nowe modele biznesowe?
 
Startup School okiem uczestnika. O 3 miesiącach pracy nad Animili
Startup School okiem uczestnika. O 3 miesiącach pracy nad AnimiliStartup School okiem uczestnika. O 3 miesiącach pracy nad Animili
Startup School okiem uczestnika. O 3 miesiącach pracy nad Animili
 
AdTaily - twórz, dziel się, zarabiaj
AdTaily - twórz, dziel się, zarabiajAdTaily - twórz, dziel się, zarabiaj
AdTaily - twórz, dziel się, zarabiaj
 
[spodek 2.0] Tworzenie prototypów serwisów internetowych
[spodek 2.0] Tworzenie prototypów serwisów internetowych[spodek 2.0] Tworzenie prototypów serwisów internetowych
[spodek 2.0] Tworzenie prototypów serwisów internetowych
 
[spodek 2.0] Erlang
[spodek 2.0] Erlang[spodek 2.0] Erlang
[spodek 2.0] Erlang
 
[spodek 2.0] ligspace.pl
[spodek 2.0] ligspace.pl[spodek 2.0] ligspace.pl
[spodek 2.0] ligspace.pl
 
[spodek 2.0] Prototypowanie
[spodek 2.0] Prototypowanie[spodek 2.0] Prototypowanie
[spodek 2.0] Prototypowanie
 
[spodek 2.0] Pierwsze ząbki
[spodek 2.0] Pierwsze ząbki[spodek 2.0] Pierwsze ząbki
[spodek 2.0] Pierwsze ząbki
 
Jak Google pomaga nam dbać o jakość stron WWW?
Jak Google pomaga nam dbać o jakość stron WWW?Jak Google pomaga nam dbać o jakość stron WWW?
Jak Google pomaga nam dbać o jakość stron WWW?
 
Przeznaczenie technologii Flex i Adobe AIR
Przeznaczenie technologii Flex i Adobe AIRPrzeznaczenie technologii Flex i Adobe AIR
Przeznaczenie technologii Flex i Adobe AIR
 
Internet salonem dla fotografii mody
Internet salonem dla fotografii modyInternet salonem dla fotografii mody
Internet salonem dla fotografii mody
 
Między spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanego
Między spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanegoMiędzy spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanego
Między spamem, a ewangelizacją. Kontrowersje wokół marketingu szeptanego
 
Blogvertising.pl przed i zaraz po inwestycji
Blogvertising.pl przed i zaraz po inwestycjiBlogvertising.pl przed i zaraz po inwestycji
Blogvertising.pl przed i zaraz po inwestycji
 

Empathy optymalizacja postgre_sql

  • 1. Jak optymalizować bazy danych w aplikacjach internetowych. Na przykładzie PostgreSQL. Wojciech Bublik
  • 2. O Empathy Internet Software House 2000 rok założenia 30 osób zatrudnienie www.empathy.pl
  • 3. O czym będę mówił? 1. Tuning konfiguracji serwera 2. O czym powinni pamiętać programiści 3. Optymalizacja zapytań na podstawie analizy bazy danych 4. Inne możliwości optymalizacji… www.empathy.pl
  • 5. Tuning konfiguracji serwera Konfiguracja systemu: /etc/sysctl.conf http://www.postgresql.org/docs/8.3/interactive/kernel-resources.html kern.ipc.shmall kern.ipc.shmmax kern.ipc.semmap www.empathy.pl
  • 6. Tuning konfiguracji serwera Konfiguracja sprzętowa 1. Szybkie dyski twarde – duży cache, RAID 2. Wiele procesorów – każde połączenie to oddzielny proces 3. Duża ilość pamięci RAM www.empathy.pl
  • 7. Optymalizacja zapytań O czym programiści powinni pamiętać 1. Indeksy CREATE INDEX idx_test1 ON mtcs_attributes (fk_attribute_class_id); CREATE INDEX idx_test2 ON opr_cttrx (ctt_amnt, ctt_sysdate) WITH (fillfactor = 70); CREATE INDEX idx_test3 ON opr_pptrx USING btree (ppt_date) WHERE ppt_acc = 5504100; www.empathy.pl
  • 8. Optymalizacja zapytań O czym programiści powinni pamiętać 2. Pola w wynikach zapytania www.empathy.pl
  • 9. Optymalizacja zapytań O czym programiści powinni pamiętać 3. Minimalizowanie ilości zapytań SQL 1. SELECT true FROM eicrm_company WHERE cmp_id = 1234; UPDATE eicrm_company SET cmp_name = ‘xyz’, cmp_short_name = ‘xyz’ WHERE cmp_id = 1234; INSERT INTO eicrm_company (cmp_name, cmp_short_name) VALUES (‘xyz’,’xyz’); 2. UPDATE eicrm_company SET cmp_name = ‘xyz’, cmp_short_name = ‘xyz’ WHERE cmp_id = 1234 RETURNING cmp_id; INSERT INTO eicrm_company (cmp_name, cmp_short_name) VALUES (‘xyz’,’xyz’) RETURNING cmp_id; www.empathy.pl
  • 10. Optymalizacja zapytań O czym programiści powinni pamiętać 3. Przetwarzanie dużych ilości danych • Transakcje, • Prepared Statements, • Multi-row insert, • Copy www.empathy.pl
  • 11. Optymalizacja zapytań O czym programiści powinni pamiętać 4. Postać normalna? Nie za wszelką cenę. CREATE TABLE eicrm_company ( cmp_id serial NOT NULL, cmp_short_name character varying(64) NOT NULL, cmp_name character varying(256) NOT NULL, cmp_nip character varying(10) ); CREATE TABLE eicrm_phone ( CREATE TABLE eicrm_address phn_id serial NOT NULL, ( phn_cmp_id integer, adr_id serial NOT NULL, phn_no character varying(16), adr_cmp_id integer, phn_type smallint, adr_street character varying(256), ); adr_street_no integer, CREATE TABLE eicrm_www adr_street_place_no character varying(8), ( adr_city character varying(256), www_id serial NOT NULL, adr_postal_code character varying(6) www_cmp_id integer, ); www_address character varying(64) ); www.empathy.pl
  • 12. Optymalizacja zapytań O czym programiści powinni pamiętać 5. Widoki • Przejrzystość zapytań SQL • Pomocnicza warstwa logiki w bazie danych • Możliwość optymalizacji zapytań bez zmian w kodzie aplikacji • Możliwość konwersji na zmaterializowane widoki www.empathy.pl
  • 13. Optymalizacja zapytań O czym programiści powinni pamiętać 6. Warto próbować różnych sposobów COST: 8173 CZAS WYKONANIA: 108 ms SELECT eis_product_group.pgr_id, max(eis_product_group.pgr_name) FROM eis_product_group LEFT OUTER JOIN tmp_prd_list_view ON (eis_product_group.pgr_id = tmp_prd_list_view.pgr_id) GROUP BY eis_product_group.pgr_id HAVING count(tmp_prd_list_view.pgr_id) > 0 COST: 9940 CZAS WYKONANIA: 108 ms SELECT DISTINCT eis_product_group.pgr_id, eis_product_group.pgr_name FROM eis_product_group INNER JOIN tmp_prd_list_view ON (eis_product_group.pgr_id = tmp_prd_list_view.pgr_id) COST: 9340 CZAS WYKONANIA: 108 ms SELECT eis_product_group.pgr_id, eis_product_group.pgr_name FROM eis_product_group WHERE pgr_id IN (SELECT DISTINCT pgr_id FROM tmp_prd_list_view) www.empathy.pl
  • 14. Optymalizacja zapytań O czym programiści powinni pamiętać 6. Warto próbować różnych sposobów COST: 14 CZAS WYKONANIA: 13 ms SELECT eis_product_group.pgr_id, eis_product_group.pgr_name FROM eis_product_group WHERE pgr_id IN (SELECT pgr_id FROM tmp_prd_list_view) COST: 89 CZAS WYKONANIA: 21 ms SELECT eis_product_group.pgr_id, eis_product_group.pgr_name FROM eis_product_group WHERE EXISTS (SELECT 1 FROM tmp_prd_list_view WHERE tmp_prd_list_view.pgr_id = eis_product_group.pgr_id) www.empathy.pl
  • 15. Optymalizacja zapytań Analiza bazy danych Analiza bazy danych 1. Analiza statystyk serwera track_counts (stats_start_collector, stats_row_level), pg_stat_user_tables, pg_stat_user_indexes 2. Analiza logów log_min_duration_statement, pgFouine www.empathy.pl
  • 16. Optymalizacja zapytań Analiza bazy danych Analiza statystyk serwera postgresql.conf: track_counts (stats_start_collector, stats_row_level) SELECT * FROM pg_stat_user_tables; SELECT * FROM pg_stat_user_indexes; www.empathy.pl
  • 17. Optymalizacja zapytań Analiza bazy danych - analiza statystyk serwera www.empathy.pl
  • 18. Optymalizacja zapytań Analiza bazy danych - analiza statystyk serwera www.empathy.pl
  • 19. Optymalizacja zapytań Analiza bazy danych Analiza logów serwera postgresql.conf: log_statement, log_min_duration_statement www.empathy.pl
  • 20. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera pgFouine (http://pgfouine.projects.postgresql.org) php pgfouine.php -file postgresql.log > sample_default.html www.empathy.pl
  • 21. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl
  • 22. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl
  • 23. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl
  • 24. Optymalizacja zapytań Explain, przykład optymalizacji SQL SELECT eicrm_user.usr_id, eicrm_user.usr_status, eicrm_user.usr_fname, eicrm_user.usr_lname, eicrm_user.usr_street_prefix, eicrm_user.usr_street, eicrm_user.usr_street_no, eicrm_user.usr_street_place_no, eicrm_user.usr_city, eicrm_user.usr_postal_code, eicrm_user.usr_post, eicrm_user.usr_email, eicrm_user.usr_phone_no, eicrm_user.usr_mobilephone_no, eicrm_user_type.utp_name,eicrm_company.cmp_city, eicrm_company.cmp_street, eicrm_company.cmp_name, ( SELECT pnc_name FROM eicrm_province WHERE eicrm_user.usr_pnc_id = eicrm_province.pnc_id ) as pnc_name FROM eicrm_user JOIN eicrm_user_user_type ON eicrm_user_user_type.uut_usr_id = eicrm_user.usr_id JOIN eicrm_user_type ON eicrm_user_user_type.uut_utp_id = eicrm_user_type.utp_id LEFT OUTER JOIN eicrm_user_company ON eicrm_user_company.ucm_usr_id = eicrm_user.usr_id LEFT OUTER JOIN eicrm_company ON eicrm_company.cmp_id = eicrm_user_company.ucm_cmp_id WHERE eicrm_user_user_type.uut_utp_id = 13 AND eicrm_user.usr_lname = 'Kowalski' AND eicrm_user.usr_city = 'Kraków' LIMIT 100 www.empathy.pl
  • 25. Optymalizacja zapytań Explain, przykład optymalizacji SQL Bez warunków, bez limit 100 www.empathy.pl
  • 26. Optymalizacja zapytań Explain, przykład optymalizacji SQL Bez warunków, z limit 100 www.empathy.pl
  • 27. Optymalizacja zapytań Explain, przykład optymalizacji SQL Z warunkami eicrm_user.usr_lname = 'Kowalski' eicrm_user.usr_city = 'Kraków' bez indeksu na warunkach www.empathy.pl
  • 28. Optymalizacja zapytań Explain, przykład optymalizacji SQL Z warunkami eicrm_user.usr_lname = 'Kowalski' eicrm_user.usr_city = 'Kraków' z indeksem usr_lname, usr_city www.empathy.pl
  • 29. Optymalizacja zapytań Explain, przykład optymalizacji SQL Z warunkami eicrm_user.usr_lname = 'Kowalski' eicrm_user.usr_city = 'Kraków' z indeksami usr_lname oraz usr_city www.empathy.pl
  • 30. Optymalizacja zapytań Inne możliwości optymalizacji Zmaterializowane widoki http://tech.jonathangardner.net/wiki/PostgreSQL/Materialized_Views • Tabela na podstawie wyników zapytania SQL zawierająca snapshot danych • Odświeżana cyklicznie lub z poziomu triggerów w tabelach • Możliwości indeksowania zmaterializowanego widoku • Proste i skuteczne rozwiązanie dające bardzo duży wzrost wydajności • Zagrożenia! Kopia nie odzwierciedla aktualnego stanu bazy danych. www.empathy.pl
  • 31. Optymalizacja zapytań Inne możliwości optymalizacji Partycjonowanie tabel constraint_exclusion = on • Podział dużej tabeli na wiele mniejszych • Bardzo duży wzrost wydajności zapytań – zapytania skierowane na tabele z odpowiednim fragmentem danych • Ułatwione zarządzanie danymi – przechowywanie danych na wielu tablespace • Niezależne blokowanie tabel • Brak unikalności klucza głównego www.empathy.pl
  • 32. Optymalizacja zapytań Inne możliwości optymalizacji Partycjonowanie tabel CREATE TABLE opr_okktr_201001 ( CREATE TABLE opr_okktr CONSTRAINT opr_okktr_201001_date_check ( CHECK ( okk_id serial NOT NULL, okk_date >= '2010-01-01'::date okk_trnref character varying(25), AND okk_date date NOT NULL, okk_date < '2010-02-01'::date okk_datelocal date, ) okk_crdno character varying(19), ) INHERITS (opr_okktr); okk_acc bigint NOT NULL, okk_amnt numeric(14,2), okk_curr_id smallint, CREATE TABLE opr_okktr_201002 okk_amntset numeric(14,2), ( okk_currset_id smallint, CONSTRAINT opr_okktr_201002_date_check okk_dateset date, CHECK ( okk_amntbill numeric(14,2), okk_date >= '2010-02-01'::date okk_currbill_id smallint, AND okk_ctt_id integer, okk_date < '2010-03-01'::date okk_ref text, ) CONSTRAINT okk_id PRIMARY KEY (okk_id), ) INHERITS (opr_okktr); ); www.empathy.pl
  • 33. Optymalizacja zapytań Inne możliwości optymalizacji Partycjonowanie tabel CREATE OR REPLACE RULE opr_okktr_ins201001 AS ON INSERT TO opr_okktr WHERE new.okk_date >= '2010-01-01'::date AND new.okk_date < '2010-02-01'::date DO INSTEAD INSERT INTO opr_okktr_201001 (okk_id, okk_trnref, okk_date, okk_datelocal, okk_crdno, okk_acc, okk_amnt, okk_curr_id, okk_amntset, okk_currset_id, okk_dateset, okk_amntbill, okk_currbill_id, okk_ctt_id, okk_ref) VALUES (new.okk_id, new.okk_trnref, new.okk_date, new.okk_datelocal, new.okk_crdno, new.okk_acc, new.okk_amnt, new.okk_curr_id, new.okk_amntset, new.okk_currset_id, new.okk_dateset, new.okk_amntbill, new.okk_currbill_id, new.okk_ctt_id, new.okk_ref); www.empathy.pl
  • 34. Optymalizacja zapytań Inne możliwości optymalizacji Partycjonowanie tabel www.empathy.pl
  • 35. Optymalizacja zapytań Inne możliwości optymalizacji Partycjonowanie tabel www.empathy.pl
  • 36. Gdzie nas znaleźć Nasz blog www.imagineblog.pl www.empathy.pl
  • 37. Konkurs Facebook 1. Wejdź na www.empathy.pl/facebook 2. „Polub” naszą stronę 3. Skomentuj wpis ze zdjęciem z Tech.Spodka 4. Hasło: „Konkurs” 5. Wygraj nagrodę:) www.empathy.pl