SlideShare a Scribd company logo
1 of 46
Download to read offline
PostgreSQLPostgreSQL
Hem Güçü Hem Güzel!Hem Güçü Hem Güzel!
6 Mayıs 2015
Van Yüzüncü Yıl Üniversitesi Bilişim Şenliği 2015
Gülçin Yıldırım
Ben Kimim?Ben Kimim?
DBA @DBA @ Blogger @Blogger @MarkafoniMarkafoni Kadın YazılımcıKadın Yazılımcı
Twitter:Twitter: @apatheticmagpie@apatheticmagpie
PostgreSQL TarihiPostgreSQL Tarihi
University of California at Berkeley (UCB) 1977.
Michael Stonebraker Ingres Projesi'ni başlattı.
PostgreSQL Çok Güçlü!PostgreSQL Çok Güçlü!
Dünyanın en gelişmiş açık kaynak kodlu veri tabanıdır.
İlişkisel bir veri tabanı yönetim sistemidir ( )
Çok büyük verileri ve anlık işlem yükü yüksek olan projeleri
PostgreSQL ile yönetmek mümkündür.
ORDBMS
PostgreSQL Çok GüçlüPostgreSQL Çok Güçlü
Güçlü, sağlam, ACID prensiplerine uygun, hata yapmaya
engel olan güvenli bir yapısı vardır.
Aktif bir topluluk tarafından desteklenmektedir.
PostgreSQL için çok fazla eklenti/araç geliştirilmektedir.
PostgreSQL belge ve dokümantasyon olarak iyidir.
SQL Standartlarına en çok uyum gösteren veri tabanıdır.
Sorgu planlayıcısı harikadır!
Performans iyileştirmek için idealdir.
Hata mesajları ve log sistemi açıktır, anlaşılırdır.
Replikasyon metodları zengindir.
Yönetimi kolaydır.
PostgreSQL ÖğrenmekPostgreSQL Öğrenmek
Postgres kaydolun. Günde 1 mail ile ne kadar
çok şey öğrenebileceğinize inanamazsınız.
mail listelerine
Liste Tanımı
PostgreSQL yönetimi
Kullanıcılar için genel bir tartışma
alanı
Postgres ve ona bağlı servis
duyuruları
Postgres performansına ilişkin
konular
pgsql-admin
pgsql-general
psql-announce
psql-
performance
PostgreSQL ÖğrenmekPostgreSQL Öğrenmek
blogunu takip edin.
( , , , , ,
, , , , )
Planet PostgreSQL
2ndQuadrant pgExperts VMware OmniTI EnterpriseDB
EndPoint credativ Cybertec CommandPrompt OpenSCG
PostgreSQL bloglarının tümü bu blogda toplanır.
PostgreSQL ÖğrenmekPostgreSQL Öğrenmek
Karşılaştığınız her konsept için yazılmış
bulup okuyun.
Postgres belgeleme konusunda en zengin açık kaynak kodlu
projelerden biridir.
Çok sık kullandığınız özellikleri bile okuyun çünkü ufak bir
detay hayat kurtarıcı olabilir.
PostgreSQL
belgesini
"Why do I love Postgres?
- Because I'm not a DBA. "
Postgres Neden Güzel?Postgres Neden Güzel?
Kurulumu Çok KolayKurulumu Çok Kolay
Mac
basit ve 'native' bir Mac OS X uygulaması ve
yükleyiciye gerek duymuyor. Uygulamayı açtığınızda yeni
bağlantılara açık bir PostreSQL sunucu hazır oluyor.
Uygulamayı kapadığınızda sunucu kapanıyor.
Postgres.app
Linux
apt-get install postgresql-9.3
yum install postgresql-server
service postgresql initdb
chkconfig postgresql on
(Debian)
(Red Hat ailesi)
Windows
Window ile yüklemek için linki inceleyiniz.
pgAdminpgAdmin
Postgres'in grafik arayüzüdür. Sorgu analiz etme, çalışan
sorguları gözlemleme özellikleri mevcuttur. Kullandığınız
özelliklerin kodlarını görebilir, değiştirebilir ve
düzenleyebilirsiniz.
pgAdminpgAdmin
Postgres Çok GüzelPostgres Çok Güzel
Parçalı dizin ( ) kullanımıpartial indexes
Create index index_1 on conference (presentation_id) where isactive = true;
Create unique index tests_success_constraint on tests (subject, target) where success;
Fonksiyonel dizin ( ) kullanımıindexes on expressions
Create index concurrently index_2 on users to_lower(email);
Şema ( )Schemas
Create schema womentechmakers;
Tablespaces
Create tablespace women location '/data/women';
Create index concurrently ariteknokent_idx on conference (speaker_id) tablespace women;
Postgres Çok GüzelPostgres Çok Güzel
, , ( )ACID Savepoint PITR WAL
harika!
, , modülü (Key/Value çiftleri)
Veri bölümleme ( ),
( )
, (with, with recursive)
, modülü
,
, ve ,
Rollback to savepoint my_svp;
Release savepoint my_svp;
Sorgu planlayıcısı
Enum tipi Boolean tipi Hstore
Partitioning Inheritance
HA, Load Balancing & Replication Hot Standby
Window Functions CTE
Gin & Gist dizin (index) tipleri pg_trgm
Full Text Search Sequence
Arrays XML tipi XML fonksyionları UUID tipi
PostgreSQL vs MySQLPostgreSQL vs MySQL
"One of the nice things about Postgres is that it
tries very hard to get you to do the right thing.
MySQL doesn't care as much."
Farklar ile ÖğrenmeFarklar ile Öğrenme
User vs RoleUser vs Role
Create user devfest with password 'i<3postgres!';
Fark, 'user' olarak yarattığımızda 'login' özelliği olan bir 'role'
yaratıyor olmamız; 'role' yarattığımızda 'login' olabilmesi için
onu rolü yaratırken belirtmek gerekir.
Create role devfestw with password 'i<3linux!'
Create role devfestwomen with password 'i<3linux!' login;
gulcin=# du
List of roles
Role name | Attributes | Member of
-------------+------------------+--------------
devfest | | {}
devfestw | Cannot login | {}
devfestwomen | | {}
Nelere Bakmalıyım?Nelere Bakmalıyım?
Bu rolleri nasıl yetkilendirebilirim?
Hepsini topluca yetkilendirsem güzel olmaz mı?
gulcin=# Create role gdg;
CREATE ROLE
gulcin=# Grant gdg to devfest;
GRANT ROLE
gulcin=# Grant gdg to devfestw;
GRANT ROLE
gulcin=# Grant gdg to devfestwomen;
GRANT ROLE
gulcin=# du
List of roles
Role name | Attributes | Member of
-------------+------------------+--------------
devfest | | {gdg}
devfestw | Cannot login | {gdg}
devfestwomen | | {gdg}
gdg | Cannot login | {}
Nelere Bakmalıyım?Nelere Bakmalıyım?
Create role gdg option;
SUPERUSER NOSUPERUSER
CREATEDB NOCREATEDB
CREATEROLE KNOCREATEROLE
CREATEUSER NOCREATEUSER
INHERIT NOINHERIT
LOGIN NOLOGIN
REPLICATION NOREPLICATION
Nelere Bakmalıyım?Nelere Bakmalıyım?
Yetkilendirdim, nasıl geri alırım?
gulcin=# Alter role gdg superuser;
ALTER ROLE
gulcin=# du
List of roles
Role name | Attributes | Member of
-------------+-------------------------+------------
gdg | Superuser, Cannot login | {}
gulcin=# Alter role gdg nosuperuser;
ALTER ROLE
gulcin=# du
List of roles
Role name | Attributes | Member of
-------------+-------------------------+------------
gdg | Cannot login | {}
Nelere Bakmalıyım?Nelere Bakmalıyım?
Tabloları, sıralı dizileri, fonksiyonları, dizinleri nasıl
yetkilendirebilirim?
Verdiğim yetkileri nasıl geri alabilirim?
Grant select,update on table table_1 to gdg;
Grant insert on all tables in schema public to devfestwomen;
Grant usage on table_1_id_seq to devfestw;
Grant select on all sequences in schema google to devfest;
Revoke select,update on table table_1 from gdg;
Revoke insert on all tables in schema public from devfestwomen;
Revoke usage on table_1_id_seq from devfestw;
Revoke select on all tables in schema google from devfest;
Şema kullanımını da öğreneyim o zaman.
Explain vs Explain AnalyzeExplain vs Explain Analyze
gulcin=# explain select * from table_1;
QUERY PLAN
------------------------------------------------------------------
Seq Scan on table_1 (cost=0.00..4740.30 rows=86430 width=140)
(1 row)
gulcin=# explain analyze select * from table_1;
QUERY PLAN
-------------------------------------------------------------------
Seq Scan on table_1 (cost=0.00..4740.30 rows=86430 width=140)
(actual time=0.274..35.983 rows=86430 loops=1)
Total runtime: 40.492 ms
(2 rows)
Begin;
Explain analyze delete from table_1;
Rollback;
Explain (format JSON) select * from table_1;
Farklar ile ÖğrenmeFarklar ile Öğrenme
Konseptlerin ortak yönlerini, kullanım amaçlarını,
birbirlerinden ayrıldıkları noktaları bulmak detayı görmenize
yardım edecektir.
Bu farkları bulmakla devam edebilirsiniz.
Postgres'i AnlamakPostgres'i Anlamak
"When elephants fight it is the grass that
suffers."
"Filler dövüşür çimenler ezilir."
Postgres'i AnlamakPostgres'i Anlamak
Uzun uzuuuun log incelemektir.
tail -f postgresql-Fri.log | perl -pe 's/.*ERROR.*/e[1;31m$&e[0m/g'
Postgres'i AnlamakPostgres'i Anlamak
Postgres eklentisi kurmak istedik. Belge bize ne önerdi?
Select * from pg_available_extensions;
Select * from pg_available_extension_versions;
gulcin=# Create extension pg_stat_statements;
CREATE EXTENSION
gulcin=# Select * from pg_stat_statements;
ERROR: pg_stat_statements must be loaded via shared_preload_libraries
gulcin=# Show config_file;
config_file
-----------------------------------------
/var/lib/pgsql/9.2/data/postgresql.conf
(1 row)
gulcin=# vim /var/lib/pgsql/9.2/data/postgresql.conf
#---------------------------------------
# RESOURCE USAGE (except WAL)
#---------------------------------------
# - Memory -
shared_preload_libraries ='pg_stat_statements'#(change requires restart)
Loglara bakarım, yetkilerini alırım. Kaldırırım.
Postgres'i AnlamakPostgres'i Anlamak
Diyelim ki bir tabloyu kaldırmak istedik...
gulcin=# select * from pg_stat_all_tables where relname = 'table_1';
-[ RECORD 1 ]-----+-------------------------------------------------
relid | 28193
schemaname | public
relname | table_1
seq_scan | 30686799 /* okuma ile ilgili parametreler */
seq_tup_read | 28979969846 /* okuma ile ilgili parametreler */
idx_scan | 2541503146 /* okuma ile ilgili parametreler */
idx_tup_fetch | 1119955873 /* okuma ile ilgili parametreler */
n_tup_ins | 129 /* kaç kayıt eklenmiş */
n_tup_upd | 123199 /* kaç kayıt güncellenmiş */
n_tup_del | 0 /* kaç kayıt silinmiş */
n_tup_hot_upd | 122323
n_live_tup | 1011
n_dead_tup | 58
last_vacuum | 2014-03-01 06:03:44.979917+02
last_autovacuum | 2014-03-01 17:08:39.960498+02
last_analyze | 2014-03-01 06:03:45.003016+02
last_autoanalyze | 2014-03-01 17:15:39.937703+02
vacuum_count | 184
autovacuum_count | 591
analyze_count | 185
autoanalyze_count | 754
gulcin=# select * from pg_stat_statements where query like '%table_1%';
(No rows)
Postgres'i AnlamakPostgres'i Anlamak
Konfigürasyon parametrelerini anlamaktır.
Loglara bakabilmek için log parametrelerini doğru ayarlamak
gerek.
Where, When, What to Log
#-------------------------------------------------
# ERROR REPORTING AND LOGGING
#-------------------------------------------------
# - Where to Log -
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
# - When to Log -
log_min_duration_statement = 500
Postgres'i AnlamakPostgres'i Anlamak
#----------------------------------------------
# RUNTIME STATISTICS
#-----------------------------------------------
# - Query/Index Statistics Collector -
track_activities = on
track_counts = on
track_functions = pl # none, pl, all
Konfigürasyon dosyasındaki bu parametreler sunucu
çapındaki koleksiyon özelliklerini kontrol eder. İstatistik
toplama açık ise, üretilen veri pg_stat ve pg_statio ailesindeki
(pg_stat_activity, pg_stat_database, pg_statio_all_indexes)
sistem tabloları tarafından erişilebilir.
Postgres'i AnlamakPostgres'i Anlamak
Kilitleri görmek ve yönetmektir.
SELECT pg_stat_activity.datname,
pg_class.relname,
pg_locks.mode,
pg_locks.granted,
pg_stat_activity.usename,
substr(pg_stat_activity.query,1,10),
pg_stat_activity.query_start,
age(now(),pg_stat_activity.query_start) AS "age",
pg_stat_activity.pid
FROM pg_stat_activity,
pg_locks
LEFT
OUTER JOIN pg_class ON (pg_locks.relation = pg_class.oid)
WHERE pg_locks.pid=pg_stat_activity.pid
AND MODE LIKE 'Exclusive%'
AND datname= 'warehouse'
ORDER BY query_start;
Select * from pg_stat_activity where pid = 0001
Select pg_terminate_backend(0001);
Postgres'i AnlamakPostgres'i Anlamak
, , , gibi yazılımlarla veri tabanı
sunucularımızı ve veri tabanlarımızı kontrol edebilirsiniz.
Nagios PRTG New Relic Cacti
Tavsiye: bir projesidir.check_postgres bucardo
check_postgres veri tabanımızın çeşitli özelliklerini izleyip
kontrol edebilmemize yarayan bir betiktir. Nagios gibi
yazılımlarla veya bağımsız betiklerle çalışabilecek şekilde
tasarlanmıştır.
Postgres'i AnlamakPostgres'i Anlamak
archive_ready autovac_freeze backends bloat
checkpoint cluster_id commitratio connection
custom_query database_size dbstats
disabled_triggers disk_space fsm_pages
fsm_relations hitratio hot_standby_delay
index_size table_size relation_size last_analyze
last_vacuum last_autoanalyze last_autovacuum
listener locks logfile pgbouncer_backends
pgbouncer_checksum pgagent_jobs prepared_txns
query_runtime query_time replicate_row
same_schema sequence settings_checksum
slony_status timesync txn_idle txn_time
version wal_files
NagiosNagios
Postgres'i AnlaPostgres'i Anlamakmak
Logları toplayıp analiz edersek çok daha iyi anlamış oluruz.
Bunun için aşağıdaki araçları kullanabilirsiniz.
pg_fouine
pgbadger
pgCluu
Log analiz etmek üzere tasarlanmış bu araçlar log incelemenizi
ve bunlardan yola çıkarak kararlar almanızı sağlayacaktır.
pgbadger ve pg_fouinepgbadger ve pg_fouine
Postgres'i AnlamakPostgres'i Anlamak
Onunla aynı dili konuşabilmektir.
SQL dili ile sorgulama yapabileceğimiz Postgres çeşitli
prosedürel dilleri de temel dağıtımında içermektedir.
, , vePL/pgSQL PL/Tcl PL/Perl PL/Python
Adı Dili
PL/Java Java
PL/PHP PHP
PL/R R
PL/Ruby Ruby
PL/sh Unix shell
Postgres ve DBA hayatıPostgres ve DBA hayatı
"PostgreSQL: making very hard things possible,
and simple things hard."
"PostgreSQL: çok zor şeyleri mümkün, çok basit
şeyleri zor kılar."
Postgres ve DBA HayatıPostgres ve DBA Hayatı
İşleri olabildiğince otomatize edin.
Bir yedekleme politikanız olsun.
Yedekleriniz güvenli ve kullanılabilir olsun.
Tablo ve dizin (index) boyutlarının artışını kontrol edin.
Uzun süren sorguları loglayın ve bu sorguları düzenli
aralıklarla iyileştirin.
Loglara düşen hataları inceleyin ve nasıl bir soruna işaret
ettiklerini anlamaya çalışın, araştırın.
Vacuum analyze, autovacuum, full vacuum işlerini planlayın.
Veri tabanı kilitleri hakkında fikir edinin ve nasıl izleyip
kontrol edeceğinizi bilin.
Postgres ve DBA HayatıPostgres ve DBA Hayatı
İşleri otomatize etmek için 'crontab' komutu çok faydalı
olacaktır. Yedekleme, vacuum yapma gibi rutinler her DBA'in
hayatını kurtaran faydalı alışkanlıklardır.
gulcin# crontab -l
00 02 * * * sh /home/postgres/scripts/getbackup.sh
0 05 * * * sh /home/postgres/scripts/daily_vacuum_analyze.sh
#WAL Archive CleanUp
0 02 * * * sh /var/lib/pgsql/removewal_archive.sh
crontab -e // crontab dosyasını düzenlemeye yarar.
# * * * * * çalıştırılacak komut
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── haftanın günü (0 - 7) (0'dan 6'ya Pazar'dan Cumartesi'ye demektir; 7 P
# │ │ │ └────────── ay (1 - 12)
# │ │ └─────────────── ayın günü (1 - 31)
# │ └──────────────────── saat (0 - 23)
# └───────────────────────── dakika (0 - 59)
Cron için örnekCron için örnek
Ne kadar çok planlanmış iş o kadar çok kolaylık demektir.
exec &> /tmp/devfestwomen.log
echo -e "Script Started att`date`nn"
drop_database() # dbname
{
echo " "
echo "Restoring the database "$1""
echo " "
psql -U postgres -d postgres -c "ALTER DATABASE $1 CONNECTION LIMIT 0;"
psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_acti
psql -U postgres -d postgres -c "DROP DATABASE $1;"
}
create_database() # dbname,owner,dumpfile
{
psql -U postgres -d postgres -c "CREATE DATABASE $1 OWNER $2 TABLESPACE new_tablesp
psql -U postgres -d postgres -c "ALTER DATABASE $1 CONNECTION LIMIT 0;"
psql -U postgres -d postgres -c "COMMENT ON DATABASE $1 IS 'DB updated at `date`';
pg_restore -U postgres -j 4 -x -O --no-tablespaces -d $1 $3
}
open_database() # dbname
{
psql -U postgres -d $1 -c "ANALYZE;"
psql -U postgres -d postgres -c "ALTER DATABASE $1 CONNECTION LIMIT -1;"
}
Git kullanın!Git kullanın!
apt-get install git // Debian tabanlı dağıtım Ubuntu gibi.
yum install git // RHEL
yum install git-core // Fedora vs.
çok güzel. ile hemen öğren.Gitlab Demo
ssh-keygen -t rsa -C "yildirim.gulcin88@gmail.com"
cat ~/.ssh/id_rsa.pub
git config --global user.name "Gulcin Yildirim"
git config --global user.email "yildirim.gulcin88@gmail.com"
mkdir devfestwomen
cd devfestwomen
git init
touch README
git add README
git commit -m 'Welcome to DevFest Women 2014!'
git remote add origin git@demo.gitlab.com:gitlab/devfestwomen.git
git push -u origin master
Terminal ve psqlTerminal ve psql
Terminal ve psqlTerminal ve psql
psql Postgres'in etkileşimli (interaktif) terminalidir.
psql -h 127.0.0.1 -U gulcin -d database_1
Komutlar size çok hız kazandıracaktır.
l ve l+
c
dt ve dt+
di ve di+
d ve d+
du
dp
df
db
x
q
?
Linux KomutlarıLinux Komutları
ile çalışıyorsanız terminalde çalıştıracağınız komutlar ile
istediklerinizi daha hızlı yapabilirsiniz.
psql
ls -la
ls -lh
pwd
locate
which
df -kh
free -g
htop/top/atop
ping
traceroute
mount
tail
less
vim
nano
cat
scp
rsync
cp
mv
rm -rf
mkdir
Teşekkürler.Teşekkürler.
Soru var mı?Soru var mı?
Beni bul!Beni bul!
Gulcin Yildirim
apatheticmagpie
@apatheticmagpie
Mail : gulcin.yildirim@markafoni.com

More Related Content

What's hot

Karabük Üniversitesi Programlama Günleri - PostgreSQL Sunumu
Karabük Üniversitesi Programlama Günleri - PostgreSQL SunumuKarabük Üniversitesi Programlama Günleri - PostgreSQL Sunumu
Karabük Üniversitesi Programlama Günleri - PostgreSQL Sunumuatifceylan
 
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...atifceylan
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 
Django Introduction
Django IntroductionDjango Introduction
Django IntroductionFatih Erikli
 
ISTSEC 2013 - Fuzzy Tabanlı Zaafiyet Araştırması
ISTSEC 2013 - Fuzzy Tabanlı Zaafiyet AraştırmasıISTSEC 2013 - Fuzzy Tabanlı Zaafiyet Araştırması
ISTSEC 2013 - Fuzzy Tabanlı Zaafiyet AraştırmasıBGA Cyber Security
 
Hackerspace PostgreSQL Atolyesi 2
Hackerspace PostgreSQL Atolyesi 2Hackerspace PostgreSQL Atolyesi 2
Hackerspace PostgreSQL Atolyesi 2Erkin Çakar
 
Hackerspace PostgreSQL Atolyesi - 1
Hackerspace PostgreSQL Atolyesi - 1Hackerspace PostgreSQL Atolyesi - 1
Hackerspace PostgreSQL Atolyesi - 1Erkin Çakar
 
Yeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12cYeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12cÖzgür Umut Vurgun
 

What's hot (15)

Karabük Üniversitesi Programlama Günleri - PostgreSQL Sunumu
Karabük Üniversitesi Programlama Günleri - PostgreSQL SunumuKarabük Üniversitesi Programlama Günleri - PostgreSQL Sunumu
Karabük Üniversitesi Programlama Günleri - PostgreSQL Sunumu
 
Varnish
VarnishVarnish
Varnish
 
Oracle12c flex rac flex asm
Oracle12c flex rac flex asmOracle12c flex rac flex asm
Oracle12c flex rac flex asm
 
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
Mongo db notları
Mongo db notlarıMongo db notları
Mongo db notları
 
Sqlmap Analiz
Sqlmap AnalizSqlmap Analiz
Sqlmap Analiz
 
Django Introduction
Django IntroductionDjango Introduction
Django Introduction
 
ISTSEC 2013 - Fuzzy Tabanlı Zaafiyet Araştırması
ISTSEC 2013 - Fuzzy Tabanlı Zaafiyet AraştırmasıISTSEC 2013 - Fuzzy Tabanlı Zaafiyet Araştırması
ISTSEC 2013 - Fuzzy Tabanlı Zaafiyet Araştırması
 
Hackerspace PostgreSQL Atolyesi 2
Hackerspace PostgreSQL Atolyesi 2Hackerspace PostgreSQL Atolyesi 2
Hackerspace PostgreSQL Atolyesi 2
 
Linux komulari
Linux komulariLinux komulari
Linux komulari
 
VERİTABANI SIZMA TESTLERİ
VERİTABANI SIZMA TESTLERİVERİTABANI SIZMA TESTLERİ
VERİTABANI SIZMA TESTLERİ
 
Dspace 5.5 Kurulum
Dspace 5.5 KurulumDspace 5.5 Kurulum
Dspace 5.5 Kurulum
 
Hackerspace PostgreSQL Atolyesi - 1
Hackerspace PostgreSQL Atolyesi - 1Hackerspace PostgreSQL Atolyesi - 1
Hackerspace PostgreSQL Atolyesi - 1
 
Yeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12cYeni başlayanlar i̇çin Oracle 12c
Yeni başlayanlar i̇çin Oracle 12c
 

Viewers also liked

150928 - Verisign Public DNS
150928 - Verisign Public DNS150928 - Verisign Public DNS
150928 - Verisign Public DNSMichael Kaczmarek
 
BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;
BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;
BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;Barry Greene
 
A Designated ENUM DNS Zone Provisioning Architecture
A Designated ENUM DNS Zone Provisioning ArchitectureA Designated ENUM DNS Zone Provisioning Architecture
A Designated ENUM DNS Zone Provisioning Architectureenumplatform
 
IoT Security in Action - Boston Sept 2015
IoT Security in Action - Boston Sept 2015IoT Security in Action - Boston Sept 2015
IoT Security in Action - Boston Sept 2015Eurotech
 
Hands-on getdns Tutorial
Hands-on getdns TutorialHands-on getdns Tutorial
Hands-on getdns TutorialShumon Huque
 
Query-name Minimization and Authoritative Server Behavior
Query-name Minimization and Authoritative Server BehaviorQuery-name Minimization and Authoritative Server Behavior
Query-name Minimization and Authoritative Server BehaviorShumon Huque
 
DNS and Troubleshooting DNS issues in Linux
DNS and Troubleshooting DNS issues in LinuxDNS and Troubleshooting DNS issues in Linux
DNS and Troubleshooting DNS issues in LinuxKonkona Basu
 
I Have the Power(View)
I Have the Power(View)I Have the Power(View)
I Have the Power(View)Will Schroeder
 
Approaches to application request throttling
Approaches to application request throttlingApproaches to application request throttling
Approaches to application request throttlingMaarten Balliauw
 
Creating Domain Specific Languages in Python
Creating Domain Specific Languages in PythonCreating Domain Specific Languages in Python
Creating Domain Specific Languages in PythonSiddhi
 
OpenDNS Enterprise Web Content Filtering
OpenDNS Enterprise Web Content FilteringOpenDNS Enterprise Web Content Filtering
OpenDNS Enterprise Web Content FilteringOpenDNS
 
Indusrty Strategy For Action
Indusrty Strategy For ActionIndusrty Strategy For Action
Indusrty Strategy For ActionBarry Greene
 
DNS for Developers - NDC Oslo 2016
DNS for Developers - NDC Oslo 2016DNS for Developers - NDC Oslo 2016
DNS for Developers - NDC Oslo 2016Maarten Balliauw
 
Remediating Violated Customers
Remediating Violated CustomersRemediating Violated Customers
Remediating Violated CustomersBarry Greene
 
Are you ready for the next attack? reviewing the sp security checklist (apnic...
Are you ready for the next attack? reviewing the sp security checklist (apnic...Are you ready for the next attack? reviewing the sp security checklist (apnic...
Are you ready for the next attack? reviewing the sp security checklist (apnic...Barry Greene
 

Viewers also liked (20)

Managing Postgres with Ansible
Managing Postgres with AnsibleManaging Postgres with Ansible
Managing Postgres with Ansible
 
150928 - Verisign Public DNS
150928 - Verisign Public DNS150928 - Verisign Public DNS
150928 - Verisign Public DNS
 
Network security
Network securityNetwork security
Network security
 
BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;
BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;
BIND’s New Security Feature: DNSRPZ - the &quot;DNS Firewall&quot;
 
A Designated ENUM DNS Zone Provisioning Architecture
A Designated ENUM DNS Zone Provisioning ArchitectureA Designated ENUM DNS Zone Provisioning Architecture
A Designated ENUM DNS Zone Provisioning Architecture
 
IDNOG - 2014
IDNOG - 2014IDNOG - 2014
IDNOG - 2014
 
IoT Security in Action - Boston Sept 2015
IoT Security in Action - Boston Sept 2015IoT Security in Action - Boston Sept 2015
IoT Security in Action - Boston Sept 2015
 
Hands-on getdns Tutorial
Hands-on getdns TutorialHands-on getdns Tutorial
Hands-on getdns Tutorial
 
Query-name Minimization and Authoritative Server Behavior
Query-name Minimization and Authoritative Server BehaviorQuery-name Minimization and Authoritative Server Behavior
Query-name Minimization and Authoritative Server Behavior
 
TTÜ Geeky Weekly
TTÜ Geeky WeeklyTTÜ Geeky Weekly
TTÜ Geeky Weekly
 
DNS and Troubleshooting DNS issues in Linux
DNS and Troubleshooting DNS issues in LinuxDNS and Troubleshooting DNS issues in Linux
DNS and Troubleshooting DNS issues in Linux
 
I Have the Power(View)
I Have the Power(View)I Have the Power(View)
I Have the Power(View)
 
Approaches to application request throttling
Approaches to application request throttlingApproaches to application request throttling
Approaches to application request throttling
 
Creating Domain Specific Languages in Python
Creating Domain Specific Languages in PythonCreating Domain Specific Languages in Python
Creating Domain Specific Languages in Python
 
OpenDNS Enterprise Web Content Filtering
OpenDNS Enterprise Web Content FilteringOpenDNS Enterprise Web Content Filtering
OpenDNS Enterprise Web Content Filtering
 
Indusrty Strategy For Action
Indusrty Strategy For ActionIndusrty Strategy For Action
Indusrty Strategy For Action
 
DNS for Developers - NDC Oslo 2016
DNS for Developers - NDC Oslo 2016DNS for Developers - NDC Oslo 2016
DNS for Developers - NDC Oslo 2016
 
Remediating Violated Customers
Remediating Violated CustomersRemediating Violated Customers
Remediating Violated Customers
 
Are you ready for the next attack? reviewing the sp security checklist (apnic...
Are you ready for the next attack? reviewing the sp security checklist (apnic...Are you ready for the next attack? reviewing the sp security checklist (apnic...
Are you ready for the next attack? reviewing the sp security checklist (apnic...
 
Introduction to DNS
Introduction to DNSIntroduction to DNS
Introduction to DNS
 

Similar to PostgreSQL Hem Güçlü Hem Güzel!

Oracle Golden Gate
Oracle Golden GateOracle Golden Gate
Oracle Golden GateAnar Godjaev
 
Gradle ile Proje Insası
Gradle ile Proje InsasıGradle ile Proje Insası
Gradle ile Proje InsasıÖmer ÖZKAN
 
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziPig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziHakan Ilter
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09Cihan Özhan
 
WordPress ve Multisite Wordpress İle Büyük Ölçekli Çözümler
WordPress ve Multisite Wordpress İle Büyük Ölçekli ÇözümlerWordPress ve Multisite Wordpress İle Büyük Ölçekli Çözümler
WordPress ve Multisite Wordpress İle Büyük Ölçekli ÇözümlerSalih Özdemir
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11Cihan Özhan
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Anar Godjaev
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı GözleyelimOguz Yarimtepe
 
Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...
Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...
Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...Ertugrul Akbas
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Mehmet Ince
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomrukoktaygokgol
 
Weblogic performance tips&tricks
Weblogic performance tips&tricksWeblogic performance tips&tricks
Weblogic performance tips&tricksZekeriya Besiroglu
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaHüseyin Mert
 
Git ile Sürüm Takibi
Git ile Sürüm TakibiGit ile Sürüm Takibi
Git ile Sürüm TakibiÖmer ÖZKAN
 
Log yonetimi tecrubeleri
Log yonetimi tecrubeleriLog yonetimi tecrubeleri
Log yonetimi tecrubeleriErtugrul Akbas
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 
Oracle veritabani performans kontrol listesi
Oracle veritabani performans kontrol listesiOracle veritabani performans kontrol listesi
Oracle veritabani performans kontrol listesiOrhan ERIPEK
 

Similar to PostgreSQL Hem Güçlü Hem Güzel! (20)

Oracle Golden Gate
Oracle Golden GateOracle Golden Gate
Oracle Golden Gate
 
Gradle ile Proje Insası
Gradle ile Proje InsasıGradle ile Proje Insası
Gradle ile Proje Insası
 
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziPig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri Analizi
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09
 
WordPress ve Multisite Wordpress İle Büyük Ölçekli Çözümler
WordPress ve Multisite Wordpress İle Büyük Ölçekli ÇözümlerWordPress ve Multisite Wordpress İle Büyük Ölçekli Çözümler
WordPress ve Multisite Wordpress İle Büyük Ölçekli Çözümler
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
 
PAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARIPAROLA KIRMA SALDIRILARI
PAROLA KIRMA SALDIRILARI
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı Gözleyelim
 
Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...
Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...
Siem, log yönetimi ve 5651 projelerinin performans ve log kaçirip kaçirmadiği...
 
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomruk
 
Radore Workshop: Wordpress Nereye Koşuyor?
Radore Workshop: Wordpress Nereye Koşuyor? Radore Workshop: Wordpress Nereye Koşuyor?
Radore Workshop: Wordpress Nereye Koşuyor?
 
Weblogic performance tips&tricks
Weblogic performance tips&tricksWeblogic performance tips&tricks
Weblogic performance tips&tricks
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
 
Git ile Sürüm Takibi
Git ile Sürüm TakibiGit ile Sürüm Takibi
Git ile Sürüm Takibi
 
Log yonetimi tecrubeleri
Log yonetimi tecrubeleriLog yonetimi tecrubeleri
Log yonetimi tecrubeleri
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Oracle veritabani performans kontrol listesi
Oracle veritabani performans kontrol listesiOracle veritabani performans kontrol listesi
Oracle veritabani performans kontrol listesi
 

PostgreSQL Hem Güçlü Hem Güzel!

  • 1. PostgreSQLPostgreSQL Hem Güçü Hem Güzel!Hem Güçü Hem Güzel! 6 Mayıs 2015 Van Yüzüncü Yıl Üniversitesi Bilişim Şenliği 2015 Gülçin Yıldırım
  • 2. Ben Kimim?Ben Kimim? DBA @DBA @ Blogger @Blogger @MarkafoniMarkafoni Kadın YazılımcıKadın Yazılımcı Twitter:Twitter: @apatheticmagpie@apatheticmagpie
  • 3. PostgreSQL TarihiPostgreSQL Tarihi University of California at Berkeley (UCB) 1977. Michael Stonebraker Ingres Projesi'ni başlattı.
  • 4. PostgreSQL Çok Güçlü!PostgreSQL Çok Güçlü! Dünyanın en gelişmiş açık kaynak kodlu veri tabanıdır. İlişkisel bir veri tabanı yönetim sistemidir ( ) Çok büyük verileri ve anlık işlem yükü yüksek olan projeleri PostgreSQL ile yönetmek mümkündür. ORDBMS
  • 5. PostgreSQL Çok GüçlüPostgreSQL Çok Güçlü Güçlü, sağlam, ACID prensiplerine uygun, hata yapmaya engel olan güvenli bir yapısı vardır. Aktif bir topluluk tarafından desteklenmektedir. PostgreSQL için çok fazla eklenti/araç geliştirilmektedir. PostgreSQL belge ve dokümantasyon olarak iyidir. SQL Standartlarına en çok uyum gösteren veri tabanıdır. Sorgu planlayıcısı harikadır! Performans iyileştirmek için idealdir. Hata mesajları ve log sistemi açıktır, anlaşılırdır. Replikasyon metodları zengindir. Yönetimi kolaydır.
  • 6. PostgreSQL ÖğrenmekPostgreSQL Öğrenmek Postgres kaydolun. Günde 1 mail ile ne kadar çok şey öğrenebileceğinize inanamazsınız. mail listelerine Liste Tanımı PostgreSQL yönetimi Kullanıcılar için genel bir tartışma alanı Postgres ve ona bağlı servis duyuruları Postgres performansına ilişkin konular pgsql-admin pgsql-general psql-announce psql- performance
  • 7. PostgreSQL ÖğrenmekPostgreSQL Öğrenmek blogunu takip edin. ( , , , , , , , , , ) Planet PostgreSQL 2ndQuadrant pgExperts VMware OmniTI EnterpriseDB EndPoint credativ Cybertec CommandPrompt OpenSCG PostgreSQL bloglarının tümü bu blogda toplanır.
  • 8. PostgreSQL ÖğrenmekPostgreSQL Öğrenmek Karşılaştığınız her konsept için yazılmış bulup okuyun. Postgres belgeleme konusunda en zengin açık kaynak kodlu projelerden biridir. Çok sık kullandığınız özellikleri bile okuyun çünkü ufak bir detay hayat kurtarıcı olabilir. PostgreSQL belgesini "Why do I love Postgres? - Because I'm not a DBA. "
  • 10. Kurulumu Çok KolayKurulumu Çok Kolay Mac basit ve 'native' bir Mac OS X uygulaması ve yükleyiciye gerek duymuyor. Uygulamayı açtığınızda yeni bağlantılara açık bir PostreSQL sunucu hazır oluyor. Uygulamayı kapadığınızda sunucu kapanıyor. Postgres.app Linux apt-get install postgresql-9.3 yum install postgresql-server service postgresql initdb chkconfig postgresql on (Debian) (Red Hat ailesi) Windows Window ile yüklemek için linki inceleyiniz.
  • 11. pgAdminpgAdmin Postgres'in grafik arayüzüdür. Sorgu analiz etme, çalışan sorguları gözlemleme özellikleri mevcuttur. Kullandığınız özelliklerin kodlarını görebilir, değiştirebilir ve düzenleyebilirsiniz.
  • 13. Postgres Çok GüzelPostgres Çok Güzel Parçalı dizin ( ) kullanımıpartial indexes Create index index_1 on conference (presentation_id) where isactive = true; Create unique index tests_success_constraint on tests (subject, target) where success; Fonksiyonel dizin ( ) kullanımıindexes on expressions Create index concurrently index_2 on users to_lower(email); Şema ( )Schemas Create schema womentechmakers; Tablespaces Create tablespace women location '/data/women'; Create index concurrently ariteknokent_idx on conference (speaker_id) tablespace women;
  • 14. Postgres Çok GüzelPostgres Çok Güzel , , ( )ACID Savepoint PITR WAL harika! , , modülü (Key/Value çiftleri) Veri bölümleme ( ), ( ) , (with, with recursive) , modülü , , ve , Rollback to savepoint my_svp; Release savepoint my_svp; Sorgu planlayıcısı Enum tipi Boolean tipi Hstore Partitioning Inheritance HA, Load Balancing & Replication Hot Standby Window Functions CTE Gin & Gist dizin (index) tipleri pg_trgm Full Text Search Sequence Arrays XML tipi XML fonksyionları UUID tipi
  • 15. PostgreSQL vs MySQLPostgreSQL vs MySQL "One of the nice things about Postgres is that it tries very hard to get you to do the right thing. MySQL doesn't care as much."
  • 17. User vs RoleUser vs Role Create user devfest with password 'i<3postgres!'; Fark, 'user' olarak yarattığımızda 'login' özelliği olan bir 'role' yaratıyor olmamız; 'role' yarattığımızda 'login' olabilmesi için onu rolü yaratırken belirtmek gerekir. Create role devfestw with password 'i<3linux!' Create role devfestwomen with password 'i<3linux!' login; gulcin=# du List of roles Role name | Attributes | Member of -------------+------------------+-------------- devfest | | {} devfestw | Cannot login | {} devfestwomen | | {}
  • 18. Nelere Bakmalıyım?Nelere Bakmalıyım? Bu rolleri nasıl yetkilendirebilirim? Hepsini topluca yetkilendirsem güzel olmaz mı? gulcin=# Create role gdg; CREATE ROLE gulcin=# Grant gdg to devfest; GRANT ROLE gulcin=# Grant gdg to devfestw; GRANT ROLE gulcin=# Grant gdg to devfestwomen; GRANT ROLE gulcin=# du List of roles Role name | Attributes | Member of -------------+------------------+-------------- devfest | | {gdg} devfestw | Cannot login | {gdg} devfestwomen | | {gdg} gdg | Cannot login | {}
  • 19. Nelere Bakmalıyım?Nelere Bakmalıyım? Create role gdg option; SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE KNOCREATEROLE CREATEUSER NOCREATEUSER INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION
  • 20. Nelere Bakmalıyım?Nelere Bakmalıyım? Yetkilendirdim, nasıl geri alırım? gulcin=# Alter role gdg superuser; ALTER ROLE gulcin=# du List of roles Role name | Attributes | Member of -------------+-------------------------+------------ gdg | Superuser, Cannot login | {} gulcin=# Alter role gdg nosuperuser; ALTER ROLE gulcin=# du List of roles Role name | Attributes | Member of -------------+-------------------------+------------ gdg | Cannot login | {}
  • 21. Nelere Bakmalıyım?Nelere Bakmalıyım? Tabloları, sıralı dizileri, fonksiyonları, dizinleri nasıl yetkilendirebilirim? Verdiğim yetkileri nasıl geri alabilirim? Grant select,update on table table_1 to gdg; Grant insert on all tables in schema public to devfestwomen; Grant usage on table_1_id_seq to devfestw; Grant select on all sequences in schema google to devfest; Revoke select,update on table table_1 from gdg; Revoke insert on all tables in schema public from devfestwomen; Revoke usage on table_1_id_seq from devfestw; Revoke select on all tables in schema google from devfest; Şema kullanımını da öğreneyim o zaman.
  • 22. Explain vs Explain AnalyzeExplain vs Explain Analyze gulcin=# explain select * from table_1; QUERY PLAN ------------------------------------------------------------------ Seq Scan on table_1 (cost=0.00..4740.30 rows=86430 width=140) (1 row) gulcin=# explain analyze select * from table_1; QUERY PLAN ------------------------------------------------------------------- Seq Scan on table_1 (cost=0.00..4740.30 rows=86430 width=140) (actual time=0.274..35.983 rows=86430 loops=1) Total runtime: 40.492 ms (2 rows) Begin; Explain analyze delete from table_1; Rollback; Explain (format JSON) select * from table_1;
  • 23. Farklar ile ÖğrenmeFarklar ile Öğrenme Konseptlerin ortak yönlerini, kullanım amaçlarını, birbirlerinden ayrıldıkları noktaları bulmak detayı görmenize yardım edecektir. Bu farkları bulmakla devam edebilirsiniz.
  • 24. Postgres'i AnlamakPostgres'i Anlamak "When elephants fight it is the grass that suffers." "Filler dövüşür çimenler ezilir."
  • 25. Postgres'i AnlamakPostgres'i Anlamak Uzun uzuuuun log incelemektir. tail -f postgresql-Fri.log | perl -pe 's/.*ERROR.*/e[1;31m$&e[0m/g'
  • 26. Postgres'i AnlamakPostgres'i Anlamak Postgres eklentisi kurmak istedik. Belge bize ne önerdi? Select * from pg_available_extensions; Select * from pg_available_extension_versions; gulcin=# Create extension pg_stat_statements; CREATE EXTENSION gulcin=# Select * from pg_stat_statements; ERROR: pg_stat_statements must be loaded via shared_preload_libraries gulcin=# Show config_file; config_file ----------------------------------------- /var/lib/pgsql/9.2/data/postgresql.conf (1 row) gulcin=# vim /var/lib/pgsql/9.2/data/postgresql.conf #--------------------------------------- # RESOURCE USAGE (except WAL) #--------------------------------------- # - Memory - shared_preload_libraries ='pg_stat_statements'#(change requires restart)
  • 27. Loglara bakarım, yetkilerini alırım. Kaldırırım. Postgres'i AnlamakPostgres'i Anlamak Diyelim ki bir tabloyu kaldırmak istedik... gulcin=# select * from pg_stat_all_tables where relname = 'table_1'; -[ RECORD 1 ]-----+------------------------------------------------- relid | 28193 schemaname | public relname | table_1 seq_scan | 30686799 /* okuma ile ilgili parametreler */ seq_tup_read | 28979969846 /* okuma ile ilgili parametreler */ idx_scan | 2541503146 /* okuma ile ilgili parametreler */ idx_tup_fetch | 1119955873 /* okuma ile ilgili parametreler */ n_tup_ins | 129 /* kaç kayıt eklenmiş */ n_tup_upd | 123199 /* kaç kayıt güncellenmiş */ n_tup_del | 0 /* kaç kayıt silinmiş */ n_tup_hot_upd | 122323 n_live_tup | 1011 n_dead_tup | 58 last_vacuum | 2014-03-01 06:03:44.979917+02 last_autovacuum | 2014-03-01 17:08:39.960498+02 last_analyze | 2014-03-01 06:03:45.003016+02 last_autoanalyze | 2014-03-01 17:15:39.937703+02 vacuum_count | 184 autovacuum_count | 591 analyze_count | 185 autoanalyze_count | 754 gulcin=# select * from pg_stat_statements where query like '%table_1%'; (No rows)
  • 28. Postgres'i AnlamakPostgres'i Anlamak Konfigürasyon parametrelerini anlamaktır. Loglara bakabilmek için log parametrelerini doğru ayarlamak gerek. Where, When, What to Log #------------------------------------------------- # ERROR REPORTING AND LOGGING #------------------------------------------------- # - Where to Log - log_destination = 'stderr' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_age = 1d log_rotation_size = 0 # - When to Log - log_min_duration_statement = 500
  • 29. Postgres'i AnlamakPostgres'i Anlamak #---------------------------------------------- # RUNTIME STATISTICS #----------------------------------------------- # - Query/Index Statistics Collector - track_activities = on track_counts = on track_functions = pl # none, pl, all Konfigürasyon dosyasındaki bu parametreler sunucu çapındaki koleksiyon özelliklerini kontrol eder. İstatistik toplama açık ise, üretilen veri pg_stat ve pg_statio ailesindeki (pg_stat_activity, pg_stat_database, pg_statio_all_indexes) sistem tabloları tarafından erişilebilir.
  • 30. Postgres'i AnlamakPostgres'i Anlamak Kilitleri görmek ve yönetmektir. SELECT pg_stat_activity.datname, pg_class.relname, pg_locks.mode, pg_locks.granted, pg_stat_activity.usename, substr(pg_stat_activity.query,1,10), pg_stat_activity.query_start, age(now(),pg_stat_activity.query_start) AS "age", pg_stat_activity.pid FROM pg_stat_activity, pg_locks LEFT OUTER JOIN pg_class ON (pg_locks.relation = pg_class.oid) WHERE pg_locks.pid=pg_stat_activity.pid AND MODE LIKE 'Exclusive%' AND datname= 'warehouse' ORDER BY query_start; Select * from pg_stat_activity where pid = 0001 Select pg_terminate_backend(0001);
  • 31. Postgres'i AnlamakPostgres'i Anlamak , , , gibi yazılımlarla veri tabanı sunucularımızı ve veri tabanlarımızı kontrol edebilirsiniz. Nagios PRTG New Relic Cacti Tavsiye: bir projesidir.check_postgres bucardo check_postgres veri tabanımızın çeşitli özelliklerini izleyip kontrol edebilmemize yarayan bir betiktir. Nagios gibi yazılımlarla veya bağımsız betiklerle çalışabilecek şekilde tasarlanmıştır.
  • 32. Postgres'i AnlamakPostgres'i Anlamak archive_ready autovac_freeze backends bloat checkpoint cluster_id commitratio connection custom_query database_size dbstats disabled_triggers disk_space fsm_pages fsm_relations hitratio hot_standby_delay index_size table_size relation_size last_analyze last_vacuum last_autoanalyze last_autovacuum listener locks logfile pgbouncer_backends pgbouncer_checksum pgagent_jobs prepared_txns query_runtime query_time replicate_row same_schema sequence settings_checksum slony_status timesync txn_idle txn_time version wal_files
  • 34. Postgres'i AnlaPostgres'i Anlamakmak Logları toplayıp analiz edersek çok daha iyi anlamış oluruz. Bunun için aşağıdaki araçları kullanabilirsiniz. pg_fouine pgbadger pgCluu Log analiz etmek üzere tasarlanmış bu araçlar log incelemenizi ve bunlardan yola çıkarak kararlar almanızı sağlayacaktır.
  • 36. Postgres'i AnlamakPostgres'i Anlamak Onunla aynı dili konuşabilmektir. SQL dili ile sorgulama yapabileceğimiz Postgres çeşitli prosedürel dilleri de temel dağıtımında içermektedir. , , vePL/pgSQL PL/Tcl PL/Perl PL/Python Adı Dili PL/Java Java PL/PHP PHP PL/R R PL/Ruby Ruby PL/sh Unix shell
  • 37. Postgres ve DBA hayatıPostgres ve DBA hayatı "PostgreSQL: making very hard things possible, and simple things hard." "PostgreSQL: çok zor şeyleri mümkün, çok basit şeyleri zor kılar."
  • 38. Postgres ve DBA HayatıPostgres ve DBA Hayatı İşleri olabildiğince otomatize edin. Bir yedekleme politikanız olsun. Yedekleriniz güvenli ve kullanılabilir olsun. Tablo ve dizin (index) boyutlarının artışını kontrol edin. Uzun süren sorguları loglayın ve bu sorguları düzenli aralıklarla iyileştirin. Loglara düşen hataları inceleyin ve nasıl bir soruna işaret ettiklerini anlamaya çalışın, araştırın. Vacuum analyze, autovacuum, full vacuum işlerini planlayın. Veri tabanı kilitleri hakkında fikir edinin ve nasıl izleyip kontrol edeceğinizi bilin.
  • 39. Postgres ve DBA HayatıPostgres ve DBA Hayatı İşleri otomatize etmek için 'crontab' komutu çok faydalı olacaktır. Yedekleme, vacuum yapma gibi rutinler her DBA'in hayatını kurtaran faydalı alışkanlıklardır. gulcin# crontab -l 00 02 * * * sh /home/postgres/scripts/getbackup.sh 0 05 * * * sh /home/postgres/scripts/daily_vacuum_analyze.sh #WAL Archive CleanUp 0 02 * * * sh /var/lib/pgsql/removewal_archive.sh crontab -e // crontab dosyasını düzenlemeye yarar. # * * * * * çalıştırılacak komut # ┬ ┬ ┬ ┬ ┬ # │ │ │ │ │ # │ │ │ │ │ # │ │ │ │ └───── haftanın günü (0 - 7) (0'dan 6'ya Pazar'dan Cumartesi'ye demektir; 7 P # │ │ │ └────────── ay (1 - 12) # │ │ └─────────────── ayın günü (1 - 31) # │ └──────────────────── saat (0 - 23) # └───────────────────────── dakika (0 - 59)
  • 40. Cron için örnekCron için örnek Ne kadar çok planlanmış iş o kadar çok kolaylık demektir. exec &> /tmp/devfestwomen.log echo -e "Script Started att`date`nn" drop_database() # dbname { echo " " echo "Restoring the database "$1"" echo " " psql -U postgres -d postgres -c "ALTER DATABASE $1 CONNECTION LIMIT 0;" psql -U postgres -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_acti psql -U postgres -d postgres -c "DROP DATABASE $1;" } create_database() # dbname,owner,dumpfile { psql -U postgres -d postgres -c "CREATE DATABASE $1 OWNER $2 TABLESPACE new_tablesp psql -U postgres -d postgres -c "ALTER DATABASE $1 CONNECTION LIMIT 0;" psql -U postgres -d postgres -c "COMMENT ON DATABASE $1 IS 'DB updated at `date`'; pg_restore -U postgres -j 4 -x -O --no-tablespaces -d $1 $3 } open_database() # dbname { psql -U postgres -d $1 -c "ANALYZE;" psql -U postgres -d postgres -c "ALTER DATABASE $1 CONNECTION LIMIT -1;" }
  • 41. Git kullanın!Git kullanın! apt-get install git // Debian tabanlı dağıtım Ubuntu gibi. yum install git // RHEL yum install git-core // Fedora vs. çok güzel. ile hemen öğren.Gitlab Demo ssh-keygen -t rsa -C "yildirim.gulcin88@gmail.com" cat ~/.ssh/id_rsa.pub git config --global user.name "Gulcin Yildirim" git config --global user.email "yildirim.gulcin88@gmail.com" mkdir devfestwomen cd devfestwomen git init touch README git add README git commit -m 'Welcome to DevFest Women 2014!' git remote add origin git@demo.gitlab.com:gitlab/devfestwomen.git git push -u origin master
  • 43. Terminal ve psqlTerminal ve psql psql Postgres'in etkileşimli (interaktif) terminalidir. psql -h 127.0.0.1 -U gulcin -d database_1 Komutlar size çok hız kazandıracaktır. l ve l+ c dt ve dt+ di ve di+ d ve d+ du dp df db x q ?
  • 44. Linux KomutlarıLinux Komutları ile çalışıyorsanız terminalde çalıştıracağınız komutlar ile istediklerinizi daha hızlı yapabilirsiniz. psql ls -la ls -lh pwd locate which df -kh free -g htop/top/atop ping traceroute mount tail less vim nano cat scp rsync cp mv rm -rf mkdir
  • 46. Beni bul!Beni bul! Gulcin Yildirim apatheticmagpie @apatheticmagpie Mail : gulcin.yildirim@markafoni.com