\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82
| Path : /var/www/html/yedekledb24/DatabaseBackupMasterv6/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv6/test_pg_performance.py |
import os
import sys
import psycopg2
import logging
from app import app
from models import DatabaseConnection
# Log konfigürasyonu
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def test_pg_stat_statements(db_id=1):
"""
PostgreSQL pg_stat_statements modülünü test eder ve ayrıntılı hata bilgisi verir.
"""
try:
with app.app_context():
# Veritabanı bağlantısını al
db_conn = DatabaseConnection.query.get(db_id)
if not db_conn:
print(f"HATA: {db_id} ID'li veritabanı bağlantısı bulunamadı!")
return False
print(f"Bağlantı bilgisi: {db_conn.name}, {db_conn.host}:{db_conn.port}/{db_conn.database}")
# Psycopg2 bağlantısı oluştur
conn_str = "host={} port={} user={} password={} dbname={}".format(
db_conn.host, db_conn.port, db_conn.username, db_conn.password, db_conn.database
)
connection = psycopg2.connect(conn_str)
connection.autocommit = True
# PostgreSQL versiyonunu kontrol et
cursor = connection.cursor()
cursor.execute("SHOW server_version")
pg_version_result = cursor.fetchone()
pg_version = pg_version_result[0] if pg_version_result and pg_version_result[0] else "Unknown"
pg_version_major = 0
if pg_version != "Unknown":
version_parts = pg_version.split('.')
if version_parts and version_parts[0].isdigit():
pg_version_major = int(version_parts[0])
print(f"PostgreSQL versiyonu: {pg_version} (major: {pg_version_major})")
# pg_stat_statements extensionu yüklü mü kontrol et
cursor.execute("SELECT 1 FROM pg_extension WHERE extname = 'pg_stat_statements'")
extension_exists = cursor.fetchone() is not None
print(f"pg_stat_statements extension yüklü: {extension_exists}")
# pg_stat_statements fonksiyonları var mı kontrol et
try:
cursor.execute("""
SELECT COUNT(*) > 0
FROM pg_proc p
JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE n.nspname = 'public' AND p.proname LIKE 'pg_stat_statements%'
""")
has_functions = cursor.fetchone()[0]
print(f"pg_stat_statements fonksiyonları mevcut: {has_functions}")
except Exception as e:
print(f"Fonksiyon kontrolü hatası: {str(e)}")
has_functions = False
# shared_preload_libraries'de pg_stat_statements var mı kontrol et
# Not: Bu komut süper kullanıcı veya pg_read_all_settings yetkisi gerektiriyor
try:
cursor.execute("SHOW shared_preload_libraries")
libraries = cursor.fetchone()[0]
has_in_preload = 'pg_stat_statements' in libraries if libraries else False
print(f"shared_preload_libraries içinde pg_stat_statements: {has_in_preload}")
print(f"shared_preload_libraries değeri: {libraries}")
except Exception as e:
print(f"shared_preload_libraries kontrolü hatası: {str(e)}")
print("Bu hata normal - sadece süper kullanıcılar shared_preload_libraries değerini görebilir")
# pg_stat_statements extension mevcut olduğu için, preload içinde de vardır
has_in_preload = extension_exists
# pg_stat_statements tablosu var mı kontrol et
try:
cursor.execute("SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relname = 'pg_stat_statements' AND n.nspname IN ('pg_catalog', 'public')")
table_exists = cursor.fetchone() is not None
print(f"pg_stat_statements tablosu mevcut: {table_exists}")
except Exception as e:
print(f"Tablo kontrolü hatası: {str(e)}")
table_exists = False
# Son olarak, gerçek bir sorguyu çalıştırmayı dene
if extension_exists:
try:
time_column = "total_exec_time" if pg_version_major >= 13 else "total_time"
print(f"Kullanılan zaman sütunu: {time_column}")
# Debug için verileri dök
cursor.execute(f"SELECT query, calls, {time_column} FROM pg_stat_statements LIMIT 5")
rows = cursor.fetchall()
print("\nÖrnek pg_stat_statements verileri:")
for i, row in enumerate(rows):
print(f"Satır {i+1}: {row}")
if not rows:
print("pg_stat_statements tablosunda veri bulunamadı.")
# Sütunları kontrol et
cursor.execute("SELECT column_name FROM information_schema.columns WHERE table_name = 'pg_stat_statements' ORDER BY ordinal_position")
columns = cursor.fetchall()
print("\npg_stat_statements tablosunun sütunları:")
for col in columns:
print(f"- {col[0]}")
except Exception as e:
print(f"pg_stat_statements sorgusunda hata: {str(e)}")
cursor.close()
connection.close()
except Exception as e:
print(f"Genel hata: {str(e)}")
return False
return True
if __name__ == "__main__":
db_id = 1
test_pg_stat_statements(db_id)