Veritabanında performans çalışması yapmak istediniz ve cpu değerleriniz yüksek çıkıyor aşağıdaki sorgu ile cpu’yu yorgan sorguları kontrol edebilir ve bun sorgu sonucu çıkan sorguları düzenleyerek cpu değerlerinizi düşürebilirsiniz.
Select
q.[text],
SUBSTRING(q.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(q.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS statement_text,
qs.creation_time,
qs.last_execution_time,
qs.execution_count,
qs.total_worker_time/1000000 as total_cpu_time_sn,
qs.total_worker_time/qs.execution_count/1000 as avg_cpu_time_ms,
qp.query_plan,
DB_NAME(q.dbid) as database_name,
q.objectid,
q.number,
q.encrypted
from
(select top 50
qs.creation_time,
qs.last_execution_time,
qs.execution_count,
qs.plan_handle,
qs.total_worker_time,
qs.statement_start_offset,
qs.statement_end_offset
from sys.dm_exec_query_stats qs
order by qs.total_worker_time desc) qs
cross apply sys.dm_exec_sql_text(plan_handle) q
cross apply sys.dm_exec_query_plan(plan_handle) qp
--where DB_NAME(q.dbid)='Database_Adı'
order by qs.total_worker_time desc
Yetkilendirme aşamasında cluster, veritabanı ,tablo,şema ,kolon,row bazlı yetkilendirmeler yapılabiliyor bunların içinde cluster seviyesinde verilen CREATEDB yetkisinin syntax’ı aşağıdaki gibidir.
Postgresql de kullanıcı oluşturdunuz fakat isminin değişmesi istendi ya da farklı nedenlerden dolayı değiştirmeniz gerekti bunun için kullanıcıyı silip tekrar oluşturup tekrar yetkilendirmenize gerek yok aşağıdaki komutu kullanarak user adını değiştirebilirsiniz.
ALTER USER Kullanıcının_eski_ismi RENAME TO Kullanıcının_yeni_ismi;
Veritabanın performansını izlemek veya anlık lockları bulup kill etmek için ya da modifiye etmek için aşağıdaki sorgulardan faydalanabilirsiniz.
SELECT pid,
now() - pg_stat_activity.query_start AS duration,
query,
state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';
Yukarıdaki komutta 5 dakikadan uzun süren sorguları getirir.Aşağıdaki komut yardımı ile ExclusiveLock olan sorguları bulmanıza yardımcı olur.
SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid where mode ='ExclusiveLock';
Yukarıdaki sorgular yardımı ile sorgunuzu buldunuz ve sorgunuza ait pid(processes id) değerini öğrendikten sonra aşağıdaki komut yardımı ile durdurabilirsiniz.
SELECT pg_cancel_backend (__ pid__);
Sorguyu tamamen pg_cancel_backend komutunu kullanarak durdurmak birkaç saniye sürebilir .
Yada aşağıdaki komutu kullanarak direk o session’ı kill edebilirsiniz .
SELECT pg_terminate_backend (__ pid__);
pg_terminate_backend komutu tutarsızlığa neden olabilir , dikkatli kullanmanızı tavsiye ederim.
Postgresql de bazen denemeleri ,testleri yapacağımızda örnek veritabanına ihtiyaç duyabiliyoruz. Bunun için epel reposunda da bulunan pagila’yı kullanabiliriz. Pagilla’yı yüklemek için aşağıdaki adımları izleyebilirsiniz.
Pagila veritabanını yüklemeden önce epel reposunu yüklemeniz gerekiyor.
Aşağıdaki komut yardımı ile epel reposunu yükleyebilirsiniz.
yum install epel-release
Repoyu indirdikten sonra pagilanın dosyalarını yüklemek için aşağıdaki komutu çalıştırıyoruz.
yum install pagila
Yukarıdaki gibi pagila’nın dosyaları kuruldu şimdi nerede olduğuna bakalım.
cd / yaptıktan sonra aşağıdaki komut yardımı ile paketi arıyoruz.
find / -name 'pagila*';
Yukarıda pagilanın dosyalarının bulunduğu path’i gördük sıra bunları yüklemeye geldi bunun için postgrese bağlanıyoruz.
Psql -U postgres
Postgres user’ı ile bağlandık ve şimdide pagila veritabanı oluşturup içine dizinlerdeki dosyaları yükleyelim.
create database pagila;
Pagila veritabanımız oluştuktan sonra “\c pagila” yazarak bağlanıyoruz ve aşağıdaki işlemleri sırası ile yapıyoruz.
Schama ,tablo,type ,domain,function gibi nesneler aşağıda oluşturuluyor.
\i /usr/share/pagila/pagila-schema.sql
Yukarıda oluşturulan tablolara insert scripti yardımı ile veriler yükleniyor.
\i /usr/share/pagila/pagila-insert-data.sql
Tablolar alter ediliyor ve copy komutu ile veriler yükleniyor.
\i /usr/share/pagila/pagila-data.sql
Veritabanı oluşturduk ve içine veriler basıldı psql e bağlanarak \l+ artı komutuyla veritabanının boyutunu kontrol edebilirsiniz.
Postgresql’in reposunda olmayan farklı extension paketini yüklemeye çalıştığımızda aşağıdaki hataya benzer hata
alabiliriz bunun çözümü için paketleri yüklememiz gerekiyor bu paketleri yükledikten sorun çözülecektir.
Postgresql de farklı veritabanlarından veri çekilebileceğinden Postgresql Foreign Data Wrapper isimli yazımda bahsederek postgresql den postgresql e fdw(Foreign Data Wrapper) yapmıştık bu yazımda Mssql ile Postgresql arasında tds_fdw extensionından faydalanarak bağlantı yapacağız .
Postgresql den Mssql Server’a bağlanmak için tds_fdw extensionından faydalanacağız fakat bundan önce kurmamız gereken birkaç paket olacak bunları aşağıdaki gibi yüklememiz gerekiyor.
Kuruluma geçmeden önce Postgresql kurulumunu lib ve dev paketlerini yüklemeden yaptıysanız versiyonunuza göre rpm paketlerini bularak yüklemeniz gerekmektedir.
Postgresql de lib ve dev paketlerini kurduk varsayarak devam ediyoruz ve root kullanıcısında devam ediyoruz.
GNU Derleyicisini extension paketi Tds_fdw uzantısının bağlı olduğu paketleri beraberinde getirdiği için yüklememiz gerekiyor.
Yum install gcc-y
Başka bir extension bağımlılığımız için yüklememiz gerek epel reposudur. Bunun sebebi extensionımız için gerekli olan freetds ‘in içinde olmasıdır.
İlk olarak aşağıdaki gibi rpm paketini indiriyoruz.