SlideShare a Scribd company logo
Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL. Wojciech Bublik
O Empathy Internet Software House www.empathy.pl 2000 rok założenia 30  osób zatrudnienie
Wstęp www.empathy.pl Foto: www.flickr.com/photos/31935170@N08/2984070905/
Tematy www.empathy.pl ,[object Object],[object Object],[object Object],[object Object]
Tuning konfiguracji serwera www.empathy.pl Foto: www.flickr.com/photos/zacky8/506835302/
Tuning konfiguracji serwera www.empathy.pl Konfiguracja sprzętowa ,[object Object],[object Object],[object Object]
Tuning konfiguracji serwera www.empathy.pl postgresql.conf max_connections shared_buffers temp_buffers max_prepared_transactions work_mem  maintenance_work_mem  checkpoint_segments effective_cache_size http://www.postgresql.org/docs/8.3/interactive/kernel-resources.html
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl http://www.flickr.com/photos/telstar/857260510/
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 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 ;
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 2. Pola  w wynikach zapytania
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 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;
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl ,[object Object],[object Object],[object Object],[object Object],[object Object]
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 5. 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_address ( adr_id serial NOT NULL,  adr_cmp_id integer,  adr_street character varying(256), adr_street_no integer,  adr_street_place_no character varying(8),  adr_city character varying(256),  adr_postal_code character varying(6) ); CREATE TABLE eicrm_phone ( phn_id serial NOT NULL, phn_cmp_id integer,  phn_no character varying(16),  phn_type smallint, ); CREATE TABLE eicrm_www ( www_id serial NOT NULL, www_cmp_id integer, www_address character varying(64) );
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 5. Postać normalna? Nie za wszelką cenę. SELECT  cmp_name, adr_city, adr_street, adr_street_no, adr_street_place_no, (SELECT phn_no FROM eicrm_phone WHERE phn_id = cmp_main_phn_id ) FROM eicrm_company  LEFT OUTER JOIN eicrm_address ON (cmp_main_adr_id = adr_id)
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl ,[object Object],[object Object],[object Object],[object Object],[object Object]
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 7.  Warto próbować różnych sposobów COST: 9940 CZAS WYKONANIA: 108 ms SELECT DISTINCT product_group.pgr_id, product_group.pgr_name FROM product_group  INNER JOIN product_list ON (eis_product_group.pgr_id = tmp_prd_list_view.pgr_id)  COST: 9340 CZAS WYKONANIA: 108 ms SELECT product_group.pgr_id, product_group.pgr_name FROM product_group  WHERE pgr_id IN (SELECT DISTINCT pgr_id FROM product_list)
Optymalizacja zapytań O czym powinni pamiętać programiści  www.empathy.pl 7.  Warto próbować różnych sposobów COST: 14 CZAS WYKONANIA: 13 ms SELECT  product_group.pgr_id, product_group.pgr_name FROM product_group  WHERE pgr_id IN (SELECT pgr_id FROM product_list) COST: 89 CZAS WYKONANIA: 21 ms SELECT product_group.pgr_id, product_group.pgr_name FROM product_group  WHERE  EXISTS  (SELECT 1 FROM product_list WHERE product_list.pgr_id = product_group.pgr_id)
Optymalizacja zapytań Analiza bazy danych www.empathy.pl Foto: FABIO MUZZI/AFP/Getty Images
Optymalizacja zapytań Analiza bazy danych www.empathy.pl 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
Optymalizacja zapytań Analiza bazy danych www.empathy.pl 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;
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 www.empathy.pl Analiza logów serwera postgresql.conf: log_statement, log_min_duration_statement
Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl pgFouine  (http://pgfouine.projects.postgresql.org) php  pgfouine.php -file postgresql.log >  sample_default.html
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ń Zrozumieć explain… www.empathy.pl SELECT  eicrm_user.usr_fname, eicrm_user.usr_lname,  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
Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Bez warunków, bez limit 100
Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Bez warunków, z limit 100
Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Z warunkami eicrm_user.usr_lname = 'Kowalski’, eicrm_user.usr_city = 'Kraków' bez indeksu na warunkach
Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Z warunkami eicrm_user.usr_lname = 'Kowalski‘, eicrm_user.usr_city = 'Kraków' z indeksem  usr_lname, usr_city
Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Z warunkami eicrm_user.usr_lname = 'Kowalski‘, eicrm_user.usr_city = 'Kraków' z indeksami  usr_lname  oraz  usr_city
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl http://www.flickr.com/photos/leesam/3666918775/
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel ,[object Object],[object Object],[object Object],[object Object],[object Object],constraint_exclusion = on
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel CREATE TABLE opr_okktr ( okk_id serial NOT NULL, okk_trnref character varying(25), okk_date date NOT NULL, okk_datelocal date, okk_crdno character varying(19), okk_acc bigint NOT NULL, okk_amnt numeric(14,2), okk_curr_id smallint, okk_amntset numeric(14,2), okk_currset_id smallint, okk_dateset date, okk_amntbill numeric(14,2), okk_currbill_id smallint, okk_ctt_id integer, okk_ref text, CONSTRAINT okk_id PRIMARY KEY (okk_id), ); CREATE TABLE opr_okktr_201001 ( CONSTRAINT opr_okktr_ 201001 _date_check  CHECK ( okk_date >= '20 10 -0 1 -01'::date  AND  okk_date <  '20 10 -0 2 -01'::date ) ) INHERITS (opr_okktr); CREATE TABLE opr_okktr_201002 ( CONSTRAINT opr_okktr_ 201002 _date_check  CHECK ( okk_date >= '20 10 -0 2 -01'::date  AND  okk_date <  '20 10 -0 3 -01'::date ) ) INHERITS (opr_okktr);
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl 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);
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel SELECT * FROM opr_okktr
Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel SELECT * FROM opr_okktr WHERE  okk_date >= ‘2008-06-15’ AND okk_date <= ‘2008-08-08’ AND okk_acc = 999999999
Optymalizacja www.empathy.pl http://www.flickr.com/photos/sakuto/1388525817/
www.imagine blog .pl www.empathy.pl Gdzie nas znaleźć Nasz blog
www.empathy.pl ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Konkurs Facebook
Dziękuję :) [email_address] www.empathy.pl

More Related Content

Similar to „Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech Bublik na KrakSpot Tech #1

Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
Semihalf
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Maciej Ziarko
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
Logicaltrust pl
 
Podkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. ĆwiczeniaPodkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. Ćwiczenia
Wydawnictwo Helion
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
Bartosz Ratajczyk
 
I ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cacheI ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cache
Jaroslaw Palka
 
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
2040.io
 
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
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!
Semihalf
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
Wojciech Klocek
 
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
allegro.tech
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
Semihalf
 
[#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
Artur Wronski
 
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
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
Wydawnictwo Helion
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
Wydawnictwo Helion
 
CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012
Maciek Próchniak
 
ABC sam optymalizuję komputer
ABC sam optymalizuję komputerABC sam optymalizuję komputer
ABC sam optymalizuję komputer
Wydawnictwo Helion
 
Data Vault w chmurze
Data Vault w chmurzeData Vault w chmurze
Data Vault w chmurze
Adrian Najczuk
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
TomaszWoniakowski1
 

Similar to „Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech Bublik na KrakSpot Tech #1 (20)

Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Podkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. ĆwiczeniaPodkręcanie procesorów. Ćwiczenia
Podkręcanie procesorów. Ćwiczenia
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
I ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cacheI ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cache
 
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
 
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?
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
 
Secure Coding w praktyce.
Secure Coding w praktyce.Secure Coding w praktyce.
Secure Coding w praktyce.
 
[#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
 
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
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
 
CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012
 
ABC sam optymalizuję komputer
ABC sam optymalizuję komputerABC sam optymalizuję komputer
ABC sam optymalizuję komputer
 
Data Vault w chmurze
Data Vault w chmurzeData Vault w chmurze
Data Vault w chmurze
 
Podstawy php
Podstawy phpPodstawy php
Podstawy php
 

More from krakspot

KrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin JaśkiewiczKrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin Jaśkiewiczkrakspot
 
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...krakspot
 
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...krakspot
 
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6krakspot
 
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da..."Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...krakspot
 
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6krakspot
 
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa..."Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...krakspot
 
Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5krakspot
 
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi..."AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...krakspot
 
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr..."Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...krakspot
 
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J..."Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...krakspot
 
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5krakspot
 
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5krakspot
 
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli..."Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
krakspot
 
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -..."Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
krakspot
 
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
krakspot
 
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
krakspot
 
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
krakspot
 
Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3
krakspot
 
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp..."Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
krakspot
 

More from krakspot (20)

KrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin JaśkiewiczKrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin Jaśkiewicz
 
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
 
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
 
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
 
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da..."Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
 
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
 
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa..."Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
 
Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5
 
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi..."AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
 
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr..."Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
 
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J..."Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
 
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
 
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
 
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli..."Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
 
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -..."Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
 
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
 
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
 
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
 
Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3
 
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp..."Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
 

„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech Bublik na KrakSpot Tech #1

  • 1. Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL. Wojciech Bublik
  • 2. O Empathy Internet Software House www.empathy.pl 2000 rok założenia 30 osób zatrudnienie
  • 3. Wstęp www.empathy.pl Foto: www.flickr.com/photos/31935170@N08/2984070905/
  • 4.
  • 5. Tuning konfiguracji serwera www.empathy.pl Foto: www.flickr.com/photos/zacky8/506835302/
  • 6.
  • 7. Tuning konfiguracji serwera www.empathy.pl postgresql.conf max_connections shared_buffers temp_buffers max_prepared_transactions work_mem maintenance_work_mem checkpoint_segments effective_cache_size http://www.postgresql.org/docs/8.3/interactive/kernel-resources.html
  • 8. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl http://www.flickr.com/photos/telstar/857260510/
  • 9. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 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 ;
  • 10. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 2. Pola w wynikach zapytania
  • 11. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 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;
  • 12.
  • 13. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 5. 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_address ( adr_id serial NOT NULL, adr_cmp_id integer, adr_street character varying(256), adr_street_no integer, adr_street_place_no character varying(8), adr_city character varying(256), adr_postal_code character varying(6) ); CREATE TABLE eicrm_phone ( phn_id serial NOT NULL, phn_cmp_id integer, phn_no character varying(16), phn_type smallint, ); CREATE TABLE eicrm_www ( www_id serial NOT NULL, www_cmp_id integer, www_address character varying(64) );
  • 14. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 5. Postać normalna? Nie za wszelką cenę. SELECT cmp_name, adr_city, adr_street, adr_street_no, adr_street_place_no, (SELECT phn_no FROM eicrm_phone WHERE phn_id = cmp_main_phn_id ) FROM eicrm_company LEFT OUTER JOIN eicrm_address ON (cmp_main_adr_id = adr_id)
  • 15.
  • 16. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 7. Warto próbować różnych sposobów COST: 9940 CZAS WYKONANIA: 108 ms SELECT DISTINCT product_group.pgr_id, product_group.pgr_name FROM product_group INNER JOIN product_list ON (eis_product_group.pgr_id = tmp_prd_list_view.pgr_id) COST: 9340 CZAS WYKONANIA: 108 ms SELECT product_group.pgr_id, product_group.pgr_name FROM product_group WHERE pgr_id IN (SELECT DISTINCT pgr_id FROM product_list)
  • 17. Optymalizacja zapytań O czym powinni pamiętać programiści www.empathy.pl 7. Warto próbować różnych sposobów COST: 14 CZAS WYKONANIA: 13 ms SELECT product_group.pgr_id, product_group.pgr_name FROM product_group WHERE pgr_id IN (SELECT pgr_id FROM product_list) COST: 89 CZAS WYKONANIA: 21 ms SELECT product_group.pgr_id, product_group.pgr_name FROM product_group WHERE EXISTS (SELECT 1 FROM product_list WHERE product_list.pgr_id = product_group.pgr_id)
  • 18. Optymalizacja zapytań Analiza bazy danych www.empathy.pl Foto: FABIO MUZZI/AFP/Getty Images
  • 19. Optymalizacja zapytań Analiza bazy danych www.empathy.pl 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
  • 20. Optymalizacja zapytań Analiza bazy danych www.empathy.pl 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;
  • 21. Optymalizacja zapytań Analiza bazy danych - analiza statystyk serwera www.empathy.pl
  • 22. Optymalizacja zapytań Analiza bazy danych - analiza statystyk serwera www.empathy.pl
  • 23. Optymalizacja zapytań Analiza bazy danych www.empathy.pl Analiza logów serwera postgresql.conf: log_statement, log_min_duration_statement
  • 24. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl pgFouine (http://pgfouine.projects.postgresql.org) php pgfouine.php -file postgresql.log > sample_default.html
  • 25. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl
  • 26. Optymalizacja zapytań Analiza bazy danych - analiza logów serwera www.empathy.pl
  • 27. Optymalizacja zapytań Zrozumieć explain… www.empathy.pl SELECT eicrm_user.usr_fname, eicrm_user.usr_lname, 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
  • 28. Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Bez warunków, bez limit 100
  • 29. Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Bez warunków, z limit 100
  • 30. Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Z warunkami eicrm_user.usr_lname = 'Kowalski’, eicrm_user.usr_city = 'Kraków' bez indeksu na warunkach
  • 31. Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Z warunkami eicrm_user.usr_lname = 'Kowalski‘, eicrm_user.usr_city = 'Kraków' z indeksem usr_lname, usr_city
  • 32. Optymalizacja zapytań Zrozumieć explain… www.empathy.pl Z warunkami eicrm_user.usr_lname = 'Kowalski‘, eicrm_user.usr_city = 'Kraków' z indeksami usr_lname oraz usr_city
  • 33. Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl http://www.flickr.com/photos/leesam/3666918775/
  • 34.
  • 35.
  • 36. Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel CREATE TABLE opr_okktr ( okk_id serial NOT NULL, okk_trnref character varying(25), okk_date date NOT NULL, okk_datelocal date, okk_crdno character varying(19), okk_acc bigint NOT NULL, okk_amnt numeric(14,2), okk_curr_id smallint, okk_amntset numeric(14,2), okk_currset_id smallint, okk_dateset date, okk_amntbill numeric(14,2), okk_currbill_id smallint, okk_ctt_id integer, okk_ref text, CONSTRAINT okk_id PRIMARY KEY (okk_id), ); CREATE TABLE opr_okktr_201001 ( CONSTRAINT opr_okktr_ 201001 _date_check CHECK ( okk_date >= '20 10 -0 1 -01'::date AND okk_date < '20 10 -0 2 -01'::date ) ) INHERITS (opr_okktr); CREATE TABLE opr_okktr_201002 ( CONSTRAINT opr_okktr_ 201002 _date_check CHECK ( okk_date >= '20 10 -0 2 -01'::date AND okk_date < '20 10 -0 3 -01'::date ) ) INHERITS (opr_okktr);
  • 37. Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl 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);
  • 38. Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel SELECT * FROM opr_okktr
  • 39. Optymalizacja zapytań Inne możliwości optymalizacji www.empathy.pl Partycjonowanie tabel SELECT * FROM opr_okktr WHERE okk_date >= ‘2008-06-15’ AND okk_date <= ‘2008-08-08’ AND okk_acc = 999999999
  • 41. www.imagine blog .pl www.empathy.pl Gdzie nas znaleźć Nasz blog
  • 42.