Tem 18 2010

WEB Server Performansını Nasıl Arttırırım? -4

Category: Apache,Gezegen,Lighttpd,Linux,Linux-KomutlarBayram Karagöz @ 01:58

Performans arttırımı konulu makalemin 4. kısmında sizlere database performans arttırımı ile ilgili ipuçlarından bahsedeceğim. Tabiiki bahsedilecek databaseler MySQL ve PostgreSQL dir. PostgreSQL Performansı arttırımı konusunu daha önce işlemiştim. Fakat bazı düzenlemeler yapmak amacıyla şuan yayında değildir. Düzenlemelerden sonra yayına almayı düşünüyorum ve sizi MySQL başarı arttırımı ile başbaşa bırakıyorum.

5- Database Performans Arttırımı

a) MySQL Performans Arttırımı

b) PostgreSQL Performans Arttırımı

5- Database Performans Arttırımı

ADOdb performance monitor uygulaması ile database yapılacak performans iyileştirmelerini görebilirsiniz.

a) MySQL Performans Arttırımı

  • Burada yapacağınız iyileştirmeler mysql in conf dosyası olan my.cnf üzerinde yapacağınız işlemlerdir. Dosyanın sahip olduğun değişkenler ve son değerlerini görmek için aşağıdaki komutu kullanabilirsiniz;
SHOW STATUS;
SHOW VARIABLES;
 

UYARI: ayar değişikliklerine başlamadan önce veritabanı yedeği almanızı öneririz ve her değişiklikten sonra mysql i restart etmeniz gerekmektedir.

  • İmkanınız varsa MySQLTuner ı çalıştırarak bu scriptin mevcut mysql serverınıza en uygun konfigürasyon değerlerini seçmesini sağlayabilirsiniz.
  • query cache değerini 1 yapın.
query_cache_type = 1. 
  • Diğer cache değerlerini aşağıdaki gibi ayarlayabilirsiniz. Eğer sürekli update işlemi yapıyorsanız bu işlem performans artışı sağlayacaktır.

query_cache_size = 36M
query_cache_min_res_unit = 2K. 
  • Aşağıdaki sorgu ile veritabanınıza açmış olduğunuz tablo sayısını bulup opened_tables > 3 * table_cache formülüne göre table_cache sayınızı ayarlayın. Bu sayı aynı zamanda yüklenilen modül ve plugin lerin miktarına göre değişebilir.
mysql>SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourdbname';
table_cache = 512 #(table_open_cache in MySQL > 5.1.2)
  • Aşağıdaki formüle göre thread cache miktarını hesaplayın ve değerini %100 doğrulukla atayın.
thread cache utilization (%) = (threads_created / connections) * 100
  • key buffer değeri SELECT sorgularına erişim hızıyla ilgili parametredir. En doğru değeri index dosyasının büyüklüğüne bağlıdır(.myi). Tavsiye edilen değer 32M dır. İdeal olarak database e 100 adet SELECT isteği yollayıp sonucuna göre değeri bulabilirsiniz. Aşağıdaki formüllerden yararlanabilirsiniz.
key_read / key_read_requests < 0.01
key_write / key_write_requests <= 1.0
 
  • maximum number of connections değerini doğru olarak ayarlamanız kullanıcılarınızın “To many connections” hatasını almaması için önemlidir. Bu değişkenin total memory kullanımını etkilediğini bilerek dikkatli olmalısınız. Mysql connectionları milisaniyeler içerisinde sonlandığından yoğun yüke sahip sistemlerde bile bu değeri 200 ün üzerine çıkarmak uygun değildir.
  • Yoğun delete ve update işlemleri olan tablolarınızı optimize ediniz. Bu sayede index leriniz yenilenecektir.

mysql>CHECK TABLE mdl_tablename;
mysql>OPTIMIZE TABLE mdl_tablename;
  • Herhangi bir tabloda problem olmasına karşın REPAIR TABLE komutunu kullanabilirsiniz.
  • Her hafta veya her ay mysql servisini durdurarak myisamchk komutunu çalıştırmak veritabanına bakım işlemlerini yapacaktır.
#myisamchk -a -S /pathtomysql/data/*.MYI

UYARI: komutu başlatmadan önce mysqld prosesinin durdurulmuş olması gerekmektedir. Aksi takdirde data kaybı yaşayabilirsiniz.

  • Geçici tabloların diske kaydedilmesi işleminin sayısını azaltın. Bunu created_tmp_disk_tables tablosundaki değeri okuyarak görebilirsiniz. Eğer bu sayı %5 ten fazla ise tmp_table_size değerini azalma görene kadar azaltın. Bu durumun RAM kullanımına etki ettiğini de dikkate almanızı tavsiye ederim.
  • Tablolarınız MyISAM formatında ise ve herhangi bir performans kazancı yaşamadığınızı düşünüyorsanız my.cnf ta InnoDB yi kapatın. skip-innodb parametresini my.cnf ye ekleyin.

Burada bulunan forumdaki tartışmadan yararlanabilirsiniz.

b) PostgreSQL Performans Arttırımı

Başka bir makalede daha ayrıntılı değinilecektir.

Web Server Performans Tuning konulu toplam 4 makaleden oluşan seride sizlere web serverınızı en verimli nasıl kullanabileceğinizi anlatmaya çalıştım. Umarım buradaki bilgiler işinize yarar. Herhangi bir kısımda takılırsanız yardımcı olmaya çalışırım. Hepinize performansı tam tuning olmuş mutlu günler dilerim…

KAYNAKLAR;

http://blog.digitalstruct.com/2008/01/31/performance-tuning-overview/

http://blog.stuartherbert.com/php/2008/01/31/more-about-performance-tuning/

http://httpd.apache.org/docs/2.0/misc/perf-tuning.html#page-header

http://docs.moodle.org/en/Performance

http://docs.moodle.org/en/lighttpd

http://www.devside.net/articles/apache-performance-tuning

http://linuxbox.co.uk/vbulletin_performance_tuning.php

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
PDF Printer    Makaleyi PDF formatında gönder

Etiketler: , , , , ,


Tem 14 2010

WEB Server Performansını Nasıl Arttırırım? -1

Category: Apache,FreeBSD,Genel,Gezegen,Lighttpd,Linux,PostgreSQLBayram Karagöz @ 13:44

Geçenlerde yapmış olduğumuz bir kurulum sonrasında performans arttırımı konularında araştırmalara başladım. Çünkü elimizde bir web sitesi vardı ve aylık web trafiği yaklaşık olarak toplam 3.5 TB, günlük giren çıkan kullanıcı sayısı ortalama 350.000 ler seviyesindeydi ve artık sistem zorlanmaya, sayfaları geç gelmeye başlamıştı. Sisteme bağlanıp cpu ve ram kullanım miktarlarını incelediğimde artık sistemin bu yükü taşımakta zorlandığı ve yeni bir sistemin kurulması gerektiğinin veya en azından donanım özelliklerinin arttırılması gerektiğinin farkına vardım.

Açıkçası sistemi migration işlemine tabi tutmadan önce yükünün ne kadar olduğunu bilemiyorduk. Çünkü bunu gösteren herhangi bir program yüklenmiş değildi. Migrasyondan sonra rrdtool ile trafik miktarını incelediğimde sistemin hiç te azımsanacak seviyede olmadığını anladım. Bu grafikleri sizlerle paylaşmak istiyorum. Grafiklerden elde edilen verilere göre sistemin ortalama trafik miktarı 3.5 Mbitler seviyesinde ve saniyede web arayüzünden yapılan istek sayısı ortalama 200 ler civarındaydı.  Ayrıca serverın yüküyle alakalı sizlerinde yorumlarını almak isterim.

web serverın awstat istatistiklerinden bir kesit;

İşte bu serverı migrasyon işlemi sonrasında Windows tan FreeBSD ye taşıdık. WEB server olarak Lighttpd ve Database server olarak ta PostgreSQL kullandık. Operasyonlar sırasında yapmış olduğum araştırmalardan edindiğim tecrübeleri burada sizlerle paylaşmak istiyorum.

Sistem tabiiki sadece kurulum yapmakla kalmadı. Bununla birlikte birtakım iyileştirmeler de yapmamız gerekti. Bu iyileştirmeleri anabaşlıklar halinde altta belirtip her anabaşlığı bir makale konusu olarak sizlere anlatmaya çalışacağım. Makalelerin çoğunluğu araştırmalardan elde edilen verilerin Türkçeye çevrilmiş halidir. Bu yüzden bazı ifadeleri tam olarak anlamayabilir veya tam çevirememiş olabilirim. Fakat anlamadığınız ifadeleri belirtirseniz yardımcı olmaya çalışırım.

Performans İyileştirme Aşamaları;

1- Giriş

2- Donanım Performans Arttırımı

3- İşletim Sistemi Performans Arttırımı

4- WEB Server Performans Arttırımı

a) PHP Performans Arttırımı

b) Apache Performans Arttırımı

c) Lighttpd, NginX ve Cherokee Performans Arttırımı

5- Database Performans Arttırımı

a) MySQL Performans Arttırımı

b) PostgreSQL Performans Arttırımı

Yukarıda belirtmiş olduğum başlıkları hergün sizlerle paylaşmaya çalışacağım. Umarım hepimize faydalı olur. Bu operasyonda bana takım arkadaşı olarak beni yanlız bırakmayan ve birçok iyileştirmeyi bizzat kendisi yapmış olan arkadaşıma buradan teşekkürlerimi sunuyorum.

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Create PDF    Makaleyi PDF formatında gönder

Etiketler: , , , , ,


Tem 07 2010

PostgreSQL Backup Scripti

Category: FreeBSD,Gezegen,PostgreSQLBayram Karagöz @ 16:58

Postgresql veritabanınız varsa belirli periyotlarda veritabanınızın yedeğini almanız yararınıza olacaktır. Her hangi bir problemden dolayı datalarınızı yitirdiğinizde geri dönüşü mümkün olmayan durumlara mahal vermemek için hazırlamış olduğum yedekleme scriptini kullanabilirsiniz.

Aşağıda bulunan script veritabanı VACUUM ANALYZE işlemi yaptıktan sonra istenilen veritabanını dump alıp sıkıştırarak yedeklerin olduğu klasöre kopyalıyor. Bununla birlikte yedeklerin bulunduğu klasör altında 30 günden eski yedekleri de temizliyor. Daha sonra tüm işlemlerin çıktılarını backup.log dosyasında istediğimiz zaman inceleyebilmemiz için logluyor.

Scripti kendinize göre konfigüre ettikten sonra crontab a istediğiniz zaman diliminde çalıştıracak şekilde ekleyebilirsiniz.

#!/usr/local/bin/bash

DUMP_CMD=/usr/local/bin/pg_dump

VACUUM_CMD=/usr/local/bin/vacuumdb

BACKUP_DIR= /your/ backup/ directory

DBUSER="pgsql"

DBNAME="your database name"

DATE=`date +%Y-%m-%d_%Hh%Mm`

LOGFILE=$BACKUP_DIR/../log/backup.log

# Make logfile

# Membuat logfile

exec 6>&1

exec >> $LOGFILE # Link file descriptor #6 with stdout.

# Saves stdout.

exec 7>&2 # Link file descriptor #7 with stderr.

# Saves stderr.

exec 2>> $LOGFILE # stderr replaced with file $LOGERR.

echo "----------------------------------------------------"
echo Backup Procedure is starting..
echo $DATE
echo Starting vacuum operation..

$VACUUM_CMD -z -a -U $DBUSER

echo Vacuum finished...

echo Starting backup of $DBNAME databases...

$DUMP_CMD -U $DBUSER $DBNAME | gzip -c > $BACKUP_DIR/database-$DATE.dump.gz

echo Backup finished...

echo "Deleting old backup files..."

oldbackup=`find $BACKUP_DIR -type f -mtime 30 -name "*.dump.gz"`

for current_file in `echo $oldbackup`

do

rm -f $current_file

echo $current_file deleted

done

echo "Old file deletion finished"

echo " "
echo "----------------------------------------------------"
VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
PDF Download    Makaleyi PDF formatında gönder

Etiketler: , , ,


Tem 01 2010

PostgreSQL Performans Tuning

Category: FreeBSD,Genel,Gezegen,PostgreSQLBayram Karagöz @ 16:53

Son Güncelleme : 19.07.2010

Default postgresql kurulumu performans tan daha çok daha geniş kitleye hitap etmek amacıyla konfigüre edilmiştir. Ayarlar genel sistemler için uygundur fakat genelde performans tarafında normalin altındadır. Bu sebeple sistemlerden maximum performans bekliyorsak sistemimize özel performans ayarları yaparak postgresql in çalışmasını daha da iyileştirebiliriz.

Postgresql ayarları farklı yollardan değiştirilebilir fakat en genel yoldan postgresql.conf dosyası vasıtasıyla istediğimiz değişikliği yapabiliriz. Spesifik ayarlar versiyondan versiyona değişiklik gösterebilir. PostgreSQL de yapılabilecek tüm ayarları ve son değerlerini pg_settings tablosunu kontrol ederek görebilirsiniz.

postgresql.conf dosyasındaki ayarlarınızın etkin olması için genelde postmaster servisini restart etmeniz gerekir. Daha sonra değişikliğin aktif olduğuna emin olmak için “SHOW config_parametresi” komutunu kullanabilirsiniz. “SHOW all” komutu ile tüm değerleri görebilirsiniz.

Postgresql performans arttırımı için şimdi anlatacağım top 10 listesindeki işlemleri uygulamanız sonucunda sisteminiz farkedilir bir şekilde hızlanacaktır. Tabiiki en iyi performans için ayarların hatasız yapılması ve her sistemin kendine göre en uygun ayarları belirlemesi gerekmektedir.

Burada anlatılacak performans ayarları sadece postgresql.conf ta yapılabilecek değişikliklerdir. Oysa bu sadece performans yükseltmenin ufak bir parçasıdır. Diğer iyileştirme işlemlerini daha sonraki makalelerimde anlatmayı düşünüyorum.

İşlemlere başlamadan önce postgresql.conf dosyasını yedeklemenizi öneririm.

#cp -rpv /usr/local/pgsql/data/postgresql.conf /usr/local/pgsql/data/postgresql.conf_org

Örnek olacak kullanılacak test sisteminin donanım bilgileri;

OS : FreeBSD

CPU: Dual-Core AMD Opteron(tm) Processor 1210 (1809.29-MHz K8-class CPU)

real memory  = 4294967296 (4096 MB)

ad4: 238475MB <Seagate ST3250310AS 3.AAF> at ata2-master SATA150

1. shared_buffers miktarını arttırın;

shared buffer miktarı işlemdeki sorgu sonuçlarının tutulduğu hafıza miktarıdır. postgresql 8.4 te bu değer default olarak 28 MB olarak ayarlıdır. Genel kural olarak bu değerin sistem RAM miktarının %5 ile %15 i arasında olması uygundur. %15 üst limit yoğun database işlemleri yapan sistemler için uygundur. shared buffer miktarının aşırı derece arttırılması OS nin çalışmasını olumsuz etkileyebilmektedir.

Test sisteminin RAM miktarının 4GB ve shared buffers miktarının %15 olduğunu düşünürsek atanacak max değer 614 MB olmalıdır.

Eğer belirleyeceğimiz shared buffer miktarı işletim sisteminin çekirdeğinin shared memory miktarının üzerine çıkarsa şu tip bir hatayla karşılaşabilirsiniz;

FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=5432001, size=660709376, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.
You can either reduce the request size or reconfigure the kernel with larger SHMMAX.
To reduce the request size (currently 660709376 bytes), reduce PostgreSQL's shared_buffers parameter (currently 78592) and/or its max_connections parameter (currently 43).
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.

FreeBSD’de bir prosese tahsis edilebilecek maksimum bellek miktarı, kern.ipc.shmmax (kern.ipc.shmmax: Maksimum paylaşılan bellek dilimi hacmi, IPC=inter-process communication) kernel yapılandırma parametresine atanan rakam tarafından sınırlandırılır. Eğer bu rakamdan daha fazlasını ayırırsanız postgresql başlarken problem yaşayabilir. En iyi performans için bu parametre ile oynamalı ve en iyi uygulama için uygun şekilde kalibre etmelisiniz. Özellikle aynı sunucu üzerinde veritabanı ve ek olarak java uygulamaları da çalıştırıyorsanız shmax değerini en fazla fiziksel belleğinize kadar kademeli olarak arttırmalı ve değerlendirmelisiniz. FreeBSD 7.2 ve üzeri sürümlerinin 2GB.’den yüksek paylaşılan bellek miktarını destekleyebildiğinin altını çizerim (kern.ipc.shmmax=2147483648). Ayrıntılı bilgi için burayı inceleyebilirsiniz.

kern.ipc.shmall (Paylaşılan bellek için kullanılabilir maksimum page sayısı) parametresini de aynı zamanda uygun bir şekilde ayarlamamız gerekecektir.Bunun için kullanacağımız eşitlik aşağıdadır;

kern.ipc.shmall = kern.ipc.shmmax / hw.pagesize

Test sistemimizde işletim sistemi kern.ipc.shmmax ve kern.ipc.shmall değerleri default kurulumdan dolayı düşük miktadır. Bu değerleri arttıralım ve kern.ipc.shmmax değerini 2GB, kern.ipc.shmall değerini de hw.pagesize değerini sabit tutarak eşitliğ göre ayarlayalım;

# sysctl -w kern.ipc.shmmax=2147483648
kern.ipc.shmmax: 536870912 -> 2147483648
# sysctl -w kern.ipc.shmall=524288
kern.ipc.shmall: 131072 -> 524288

kernel değerlerini ayarladıktan sonra postgresql için atayacağımız shared buffer miktarının max. değerini 614 MB bulmamıza rağmen her ihtimale karşın 512 MB olarak atayalım.

# vi /usr/local/pgsql/data/postgresql.conf

değeri atayalım;

shared_buffers = 512MB

veritabanını restart edelim ve durumu gözleyelim. Eğer restart düzgün yapıldı ise değerimiz başarılı bir şekilde aktif olmuştur.

# /usr/local/etc/rc.d/postgresql restart

veritabanından ayarlarımızın doğruluğunu kontrol edelim;

# SHOW shared_buffers ;
 shared_buffers
----------------
 512MB
(1 row)

belirlediğimiz kernel değerlerinin açılışta aktif olmasını istiyorsak bu değerleri /etc/sysctl.conf dosyasına girmemiz gerekmektedir.

kern.ipc.shmmax=2147483648
kern.ipc.shmall=524288

2. effective_cache_size miktarını arttırın;

Bu değer postgresql sorgu optimizer ına ne kadarlık bir OS dosya sistemi cache nin elverişli olduğunu gösterir. Sadece postgresql in koştuğu sistemlerde bu değer genellikle fiziksel memory e yakın yapılmaktadır. Siz bu değer ile postgresql optimizer ına OS cache inde elverişli ne kadarlık bir boyut olduğunu söylemiş oluyorsunuz. Postgresql de bu miktara göre sorguları optimize etmekte daha rahat veya daha temkinli davranabilir.

Bu değeri total RAM in 1/2 si kadar ayarlamak gayet normal bir optimizasyondur. 3/4 ü kadar ayarlamak ise biraz daha agresif fakat hala uygun bir durumdur. En uygun değeri ayarlamak için OS nin sistem istatistiklerini kontrol edebilirsiniz. Unix benzeri sistemlerde free veya top komutu ile free-cached number değerini görebilirsiniz. Postgresql de bu değer default olarak 128 MB atanmıştır. Biz bu değeri de RAMimizin 1/2 si kadarına yani 2GB a çıkaralım. (bu değeri değiştirdikten sonra restart gerekli değildir. HUP ile aktive edebilirsiniz.);

# SHOW effective_cache_size ;
 effective_cache_size
----------------------
 128MB
(1 row)

postgresql.conf ayarı;

effective_cache_size = 2048MB

restarttan sonra;

# SHOW effective_cache_size ;
effective_cache_size
----------------------
 2GB
(1 row)

3. VACUUM işlemini sıklıkla yapın;

veritabanında sürekli silme veya update işlemleri yapıldığında dead tuple(ölü data setleri) lar oluşur. Bu tuple lar otomatik olarak silinmezler. Eğer bir tablodaki tuple lar silinmez ise postgresql bu tuple ları gereksiz bir şekilde okuyup işe yaramadığını anlaması gerekecek. Eğer veritabanında binlerce dead tuple varsa hem zaman kaybı olacak hem de performans olumsuz etkilenecektir. Bu nedenle postgreSQL de VACUUM işlemi 3 neden için yapılması gerekir;

  • update ve delete edilmiş satırlardaki dead tuple ları temizleyerek disk alanı kazanma. (windowstaki defrag işlemi gibi.)
  • PostgreSQL sorgu optimizer ın kullandığı istatistiklerin update edilmesi.
  • transaction ID wraparound problemine karşın eski verilerin kaybolmasından kurtulmak

VACUUM işlemi sırasında tablolara ALTER TABLE işlemi dışında SELECT, UPDATE, DELETE ve INSERT sorguları çekilip işlem yapılabilir. Ayrıca VACUUM işlemi yapılırken hatrı sayılır bir miktarda I/O trafiği oluşmaktadır. Bu yüzden diğer işlemlerin etkilenmemesi için VACUUM işleminin serverın I/O yükü bakımından yoğun olmadığı zamanları tercih ediniz.

Ayrıntılı bilgi için routine vacuuming sayfasını kontrol edebilirsiniz.

***autovacuum işlemi;

PostgreSQL de şiddetle yapılması tavsiye edilen bu özellik VACUUM işleminin otomatik olarak yapılmasını sağlar. Buna göre yoğun miktarda eklenmiş, update edilmiş veya silinmiş tuple lar kontrol edilir ve istatistikler sürekli güncellenir. autovacuum işlemi VACUUM ve ANALYZE işlemini beraber yapar. Default olarak postgreSQL de açıktır. Kapatsanız bile transaction ID wraparound problemine karşın gerektiğinde çalışır.

Biz kendi sistemimizde autovacuum özelliğini aktif edip aynı zamanda gece belirli bir saatte hem VACUUM hemde ANALYZE işleminin yapılması için bir script düzenleyeceğiz. Scriptimize ekleyeceğimiz satır yaklaşık şu şekilde olacaktır;

/usr/local/bin/vacuumdb -z -a -U database_user

4.ANALYZE işlemini sıklıkla yapın;

PostgreSQL in query optimizer ı cost-based yapıda olmasında dolayı istatistiklere göre işlem yapmaktadır. ANALYZE işlemi bu istatistiklerin güncellenmesini sağlar ve optimizerin işini kolaylaştırır. ANALYZE işlemi sonrasında pg_statistic tablosu güncellenir. Bu nedenle düzenli periyotlarla ANALYZE işleminin yapılması performans için uygun bir yöntemdir.

5. VACUUM FULL komutunu çok sık çalıştırmayın;

  • VACUUM FULL işlemi VACUUM a göre daha çok disk alanı kazandırır. Fakat VACUUM a göre daha yavaş çalışır.
  • VACUUM FULL çalışırken tabloları kilitler ve bu tablolara ulaşılamaz.
  • VACUUM FULL tablo boyutunu düşürmesine rağmen index boyutunu aynı oranda düşüremez. Tam tersine index boyutunu yükseltir.

Bu sebeplerden dolayı sık çalıştırılması uygun değildir.

6. WAL dosyalarını fiziksel olarak ayrı diske taşıyın;

pg_xlog dizini sıklıkla update edilen dataların bulunduğu dizinidir. Bu dizinin ayrı fiziksel bir diske kopyalanması performansta %25 lere varan artış sağlar.

7. sort_mem değerini arttırın;

Eğer sorgularınızda birçok komplek sıralama işlemleri mevcut ise ve memory nizde yeterli seviyede ise sort_mem değerini arttırarak memory de sıralama işlemleri kapasitesini yükseltmiş olursunuz.

NOT: sort_mem parametresi postgreSQL 8.4 versiyonunda kaldırılmıştır.

8. random_page_cost değerini düşürün;

Eğer RAID konfigürasyonlu SCSI disklere sahipseniz bu değeri düşürerek query optimizerın rasgele index scan yapmasını sağlayabilir ve bu işlemi hızlandırabilirsiniz. Postgresql de default olarak değeri 4 atanmıştır. Hızlı disklere sahip iseniz bu değeri 2 ye düşürebilirsiniz.

9.max_fsm_pages ve max_fsm_relations değerlerini arttırın;

postgresql de sıklıkla yapılan update ve delete işlemleri sonucunda dead tuble ların oluştuğunu daha önce söylemiştik. Vacuum sayesinde bu tuble lar tekrar kullanılabilir hale gelmektedir. Free Space Map değeri doğrudan doğruya bu tubleların kayıt altına alınmasıyla alakalıdır. Vacuum işlemi sonucunda eğer bu boşluklar max_fsm_pages değerini aşıyorsa kalan dead tuble lar belirlenemez. Dolayısıyla da VACUUM işlemi tam başarımla yapılamaz. Bu yüzden max_fsm_pages değeri VACUUM ANALYZE VERBOSE komutu sonrasında gerekli olan max_fsm_pages sayısına göre ayarlanabilir. Sonuç olarak ta VACUUM veya VACUUM FULL komutuna olan gereksiniminiz azalmış olur.

NOT: PostgreSQL 8.4 te FSM komple tekrardan yazılmıştır. max_fsm_pages ve max_fsm_relations değerleri çıkarılmıştır. Artık yeni FSM kendi başına adapte olmaktadır. Ayrıntılı bilgi için burayı ziyaret edin.

10. wal_buffers değerini arttırın;

WAL(Write Ahead Log). Eğer veritabanınızda yazma işlemleri sıklıkla yapılıyorsa bu değeri arttırmanız boş disk alanının iyi kullanılması açısından yararınıza olacaktır. Benchmarking testleri bu değeri 1MB yapmanın ideal olduğunu göstermiştir.

Yukarıda anlatmış olduğumuz tuning ayarları iyileştirme sürecinin sadece küçük bir parçasıdır bunun yanında yapılabilecek optimizasyon aşamaları;

  • Memory Kullanımı İyileştirmesi
  • CPU Kullanımı İyileştirmesi
  • Disk Kullanımı İyileştirmesi
  • SQL sorguları İyileştirmesi
  • İndex Kullanım İyileştirmeleri
  • Network İyileştirmesi

Bu kategorilerideki konuları da vaktim olursa ilerleyen makalelerimde anlatmaya çalışacağım.

KAYNAKLAR:

http://linuxfinances.info/info/quickstart.html

http://wiki.postgresql.org/wiki/Performance_Optimization

http://www.varlena.com/GeneralBits/Tidbits/perf.html

http://www.enderunix.org/docs/postgresql/postgresql_tuning.pdf

http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
  • Share/Bookmark
Create PDF    Makaleyi PDF formatında gönder

Etiketler: , , ,


Haz 27 2010

En Süper WEB Server için 5 Elementin Birleşmesi (FreeBSD 8.0, PHP52, Lighttpd, PostgreSQL ve Ben)

Category: FreeBSD,Genel,Gezegen,Linux,PostgreSQLBayram Karagöz @ 17:57

Herkesin gönlünde yatan bir server vardır. Öyle bir server ki hem stabil, hem performanslı hem de hızlı çalışsın dediğiniz olmuştur. Böyle bir server üzerinde web servisi çalıştırmak kadar zevkli birşey yoktur benim için…
İşte bu vesileyle yaptığım araştırmalar neticesinde en iyi web server için kullanılabilecek komponentleri topladım ve size bu 5 elementi sunuyorum;

  • FreeBSD 8.0 Release

  • PHP52

  • Lighttpd 1.4.26

  • PostgreSQL 8.4.4

  • Ben :)

Şimdi de sözü fazla uzatmadan bu elementleri birleştirip ortaya harika birşey çıkaralım. (Kurulum testi sanal makinede yapılmış ve başarılı olunmuştur.);

FreeBSD 8.0 Kurulumu;

FreeBSD kurulumu asıl konumuz olmadığı için burada OS kurulumu üzerinde detaylı olarak durmayacağım. Buradan 8.0 Release versiyonu indirerek minimum seviyede kurulum yapalım. Minimum kurulum yapmamızın sebebi sisteme istenmeyen ve yük getireceğini düşündüğümüz yazılımların gereksiz yere kaynak harcamasını engellemektir.

Kurulum yapıldıktan sonra kişisel olarak port ağacını, kabuk olarak bash programını kurdum. Daha sonra uzaktan ssh ile bağlanıp işlemlere devam ettim.

UYARI: Kurulum yapıldıktan sonra uzaktan ssh giriş denemelerinde root girişine sistem izin vermemektedir. Bu yüzden kurulum sırasında oluşturulan ikincil kullanıcının grubunun wheel olarak değiştirilmesi gerekmektedir. Ben bu tarafı kullanıcıyı rmuser komutu ile silip adduser ile tekrar oluşturarak çözdüm. Siz de böyle yapabilirsiniz.

PHP52 Kurulumu;

Kuruluma başlamadan önce port ağacını güncelleyelim.

#portsnap fetch

#portsnap extract

Güncellemeden sonra port ağacından php nin 5.2 versiyonu bulup yükleyelim.

# cd  /usr/ports/lang/php52
 # make
 # make install
 # make clean

Kurulum tamamlandıktan sonra php nin db desteği gibi bize lazım olacak uzantılarını extension dan işaretleyip yükleyelim;

NOT: pgsql uzantısını listeden seçmeyi unutmayın!

ctype:    The ctype shared extension for php
curl:    The curl shared extension for php
dom:      The dom shared extension for php
gd:       The gd shared extension for php
imap:     The imap shared extension for php
mbstring: The mbstring shared extension for php
mcrypt:   The mcrypt shared extension for php
mysql:    The mysql shared extension for php
mysqli:   The mysqli shared extension for php
pcre:     The pcre shared extension for php
posix:  The posix shared extension for php
session:  The session shared extension for php
simplexml: The simplexml shared extension for php
xml:  The xml shared extension for php
xmlreader: The xmlreader shared extension for php
xmlwriter: The xmlwriter shared extension for php
zlib:  The zlib shared extension for php
# cd /usr/ports/lang/php52-extensions
 # make
 # make install
 # make clean

Lighttpd 1.4.26 Kurulumu;

Lighttpd, yüksek performanslı sistemler için dizayn edilmiş güvenli, hızlı, uysal ve oldukça esnek bir web serverdır. Diğer web serverlar ile kıyaslandığında oldukça düşük memory ve cpu kullanımına sahip olduğu gözlenmektedir. Öne çıkan özellikleri FASTCGI, CGI, Auth, Output-Compression, URL-Rewriting ve daha birçokları ile yük problemi çeken sistemler için idealdir. Aynı zamanda kurulumu da oldukça basittir.

Portlardan yerini belirleyip kuralım;

# cd /usr/ports/www/lighttpd
# make
# make install
# make clean

açılışta otomatik çalışması için rc.conf a giriş yapalım;

# echo 'lighttpd_enable="YES"' >> /etc/rc.conf

test yapabilmek amacıyla www klasörü altına bir html dosyası oluşturalım;

# mkdir -p /usr/local/www/data
# echo 'HELLO. LIGHTTPD WORKS' > /usr/local/www/data/index.html

lighttpd.conf dosyasını açarak bazı değişiklikler yapalım;

# nano +43 /usr/local/etc/lighttpd.conf

bu ifadeyi…

server.errorlog             = "/var/log/lighttpd.error.log"

bu şekilde değiştirelim…

server.errorlog             = "/var/log/<em>lighttpd/</em>lighttpd.error.log"

119. satırda bu ifadeyi..

accesslog.filename          = "/var/log/lighttpd.access.log"

bu şekilde değiştirelim…

accesslog.filename          = "/var/log/<em>lighttpd/</em>lighttpd.access.log"

PHP nin FASTCGI modülünü kullanmak için lighttpd.conf dosyasında..

modülün enable olduğuna emin olun;

server.modules              += ( "mod_fastcgi" )

aşağıdaki satırları ekleyelim…

fastcgi.server = ( ".php" =>
( "localhost" =>
                     (
                        "socket" => "/tmp/php-fastcgi.socket",
                        "bin-path" => "/usr/local/bin/php-cgi"
                      )
                   )
)

log dosyaları klasörü oluşturup haklarını düzenleyelim;

# mkdir /var/log/lighttpd
# chown www:www /var/log/lighttpd

lighttpd servisini çalışmasını başlatın,

# /usr/local/etc/rc.d/lighttpd start

Browser ınıza sistemin ip sini yazıp “HELLO. LIGHTTPD WORKS” ifadesinin yazıp yazmadğını kontrol ediniz.

PostgreSQL 8.4.4 Kurulumu;

8.4 ü portlarda bulup server ve client versiyonlarını yükleyelim.(Server yüklenince clientta otomatik yüklenir.)

# cd /usr/ports/databases/postgresql84-server
# make config
# make install clean

açılışta otomatik başlama için rc.conf ayarları yapılır,

# echo 'postgresql_enable="YES"' >> /etc/rc.conf

ilk database oluşturma işlemi başlatılır,

# /usr/local/etc/rc.d/postgresql initdb

komut çıktısı;

/usr/local/etc/rc.d/postgresql initdb
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.

The database cluster will be initialized with locale C.
The default text search configuration will be set to "english".

fixing permissions on existing directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 40
selecting default shared_buffers ... 28MB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    /usr/local/bin/postgres -D /usr/local/pgsql/data
or
    /usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

postgresql servisi başlatılır;

# /usr/local/etc/rc.d/postgresql start

Tüm kurulum işlemleri tamamlanmıştır. Artık yeni ve süper server ınız kullanıma hazırdır. İyi günlerde kullanınız. Kurulum sırasında karşılaştığınız hataları burada benimle paylaşırsanız yardımcı olmaya çalışırım…

NOT: Tüm kurulumun doğru çalışıp çalışmadığını kontrol etmek amacıyla phppgadmin programını buradan indirip sisteminize kurmayı deneyebilirsiniz.

KAYNAKLAR;

http://www.cyberciti.biz/tips/howto-install-lighttpd-on-freebsd.html

http://jasonk2600.wordpress.com/2010/01/11/installing-postgresql-on-freebsd/

http://www.linuxgeek.ca/wordpress/?p=130

http://www.cyberciti.biz/faq/howto-setup-lighttpd-fastcgi-php-server/

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
PDF Download    Makaleyi PDF formatında gönder

Etiketler: , , , , ,


Sonraki Sayfa »