כיצד לבצע בדיקות ביצועים על PostgreSQL לביצועים אופטימליים

ככל שאימוץ PostgreSQL גדל, מנהלי מסדי נתונים (DBAs) ומפתחים צריכים לעיתים קרובות להעריך את הביצועים שלו כדי להבטיח שהיישומים שלהם פועלים ביעילות תחת עומסים שונים. מדידת ביצועים היא תהליך קריטי שמודד כמה טוב PostgreSQL מתמודד עם עומסים משתנים, ועוזר לזהות צווארי בקבוק ואזורים לשיפור. המאמר הזה מתחקה אחרי כלים, מטריצות ותרחישי בדיקה שיעזרו לך למדוד את PostgreSQL כמו מקצוען.

למה למדוד את PostgreSQL?

מדידה מאפשרת לך:

  1. למדוד את הקיבולת וההשהייה של מסד הנתונים שלך תחת עומסים מסוימים.
  2. לזהות צווארי בקבוק של חומרה או תצורה.
  3. להשוות את ההשפעה של שיפורים כמו שינויי אינדקס או כתיבה מחדש של שאילתות.
  4. לחקות תרחישים מציאותיים כמו פעילות משתמשים רבה במקביל או כתיבת נתונים בהמונים.

מטריצות מפתח לניטור

בזמן מדידת PostgreSQL, תמקד במטריצות הבאות:

  • TPS (Transactions Per Second): מודד כמה עסקאות המסד משלים בשנייה.
  • IOPS (Input/Output Operations Per Second): עוקב אחר פעילות הדיסק.
  • השהייה: מודד את הזמן שלוקח לבצע שאילתות, מה שמשפיע על חוויית המשתמש.
  • ניצול משאבים: עוקב אחר שימוש במעבד, זיכרון ודיסק בזמן המדידה.

כלים למדידת ביצועים של PostgreSQL

1. pgbench

מה זה pgbench? 

pgbench הוא כלי המדידה המובנה של PostgreSQL. הוא מדמה לקוחות מקבילים המבצעים עסקאות ומודד את ביצועי המסד הנתונים.

התקנה

הוא מגיע עם התקנות של PostgreSQL. כדי לאשר, הרצו:

Shell

 

bash
pgbench --version

התחלה

1. הכנת מסד נתונים למדידה:

Shell

 

bash
pgbench -i -s 50 mydb

כאן, -s מגדיר את גורם ההקפאה, שקובע את גודל קבוצת הנתונים.

2. הרצת מדידה פשוטה:

Shell

 

bash
pgbench -c 10 -j 2 -T 60 mydb

  • -c 10: מספר חיבורי הלקוחות.
  • -j 2: מספר החוטים.
  • -T 60: משך המדידה בשניות.

דוגמת פלט:

YAML

 

transaction type: TPC-B (sort of)
scaling factor: 50
number of clients: 10
number of threads: 2
duration: 60 s
tps = 1420.123 (excluding connections establishing)

2. Sysbench

למה להשתמש ב-Sysbench? 

Sysbench הוא כלי מדידה גמיש למסדי נתונים ומערכות. הוא מציע גמישות רבה יותר מ-pgbench לעבודות מותאמות אישית.

התקנה

התקינו את Sysbench באמצעות הפקודה הבאה:

Shell

 

bash
sudo apt-get install sysbench

התחלה

1. הכנת המדידה:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --tables=10 --table-size=1000000 \
  oltp_read_write prepare

2. הרצת המדידה:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --threads=4 \
  --time=60 oltp_read_write run

3. pg_stat_statements

מה זה pg_stat_statements?

הרחבת PostgreSQL שמעקבת אחר ביצועי שאילתות וסטטיסטיקות ביצוע. למרות שהיא לא מדמה עומסי עבודה, היא עוזרת לנתח שאילתות איטיות במהלך בדיקות ביצועים.

התקנה

1. הפעל את ההרחבה בקובץ postgresql.conf:

Plain Text

 

shared_preload_libraries = 'pg_stat_statements'

2. טען מחדש את ההגדרות וצור את ההרחבה:

SQL

 

CREATE EXTENSION pg_stat_statements;

שימוש

הרץ את השאילתה הבאה כדי לזהות הצהרות עם זמן ביצוע ארוך:

SQL

 

SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;

תרחישי בדיקת ביצועים

להלן הצגה חזותית של תוצאות הבדיקה לשלושה תרחישים: עומס קריאה גבוה, עומס כתיבה גבוה ועומס מעורב. תרשים חתכי העסקאות לשנייה (TPS) מדגים את יכולתה של PostgreSQL להתמודד עם עסקאות מקבילות בצורה יעילה, בעוד שתרשים ההשהייה ממחיש את הזמן שלוקח לביצוע השאילתה במילישניות.

חתכי עסקאות לשנייה של PostgreSQL (TPS)

השהיית שאילתות של PostgreSQL

סוגי עומסי עבודה

1. עומסי קריאה גבוהים

מטרה: בדיקת ביצועי מסד נתונים תחת פעילות קריאה גבוהה.

התקנה: השתמש ב pgbench עם עסקאות קריאה בלבד בברירת המחדל:

Shell

 

bash
pgbench -c 50 -T 120 -S mydb

  • -S: בצע רק שאילתות SELECT.
  • -c 50: סימולציה של 50 לקוחות מקבילים.

2. עומסי כתיבה גבוהים

מטרה: מדידת ביצועי מסד נתונים עם הוספות או עדכונים תכופים.

התקנה:שנה את הבדיקה כך שתכלול כתיבה:

Shell

 

bash
pgbench -c 20 -j 4 -T 120 -N mydb

  • -N: בצע שאילתות שאינן SELECT.

3. עומסי עבודה מעורבים של קריאה/כתיבה

מטרה: לדמות עומס עבודה בעולם האמיתי שמערבב קריאות וכתיבות.

הגדרות: השתמש בתצורה מאוזנת:

Shell

 

bash
pgbench -c 30 -j 4 -T 180 mydb

טיוב PostgreSQL לשיפור תוצאות בדיקות הביצועים

התאם הגדרות זיכרון

התאם את הפרמטרים הבאים ב postgresql.conf:

Plain Text

 

shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB

אפשר ביצוע שאילתות מקבילות

התאם את הפרמטרים הבאים ב postgresql.conf:

Plain Text

 

max_parallel_workers_per_gather = 4

טייב קלט/פלט לדיסק

השתמש ב-SSD לקבצי WAL והתאם את ההגדרות הבאות:

Plain Text

 

wal_buffers = 16MB
synchronous_commit = off

תוצאות דוגמה ופרשנות

תרחיש: 50 לקוחות מקבילים מריצים עומס עבודה כבד קריאה למשך 60 שניות.

פלט:

Plain Text

 

tps = 2500.456 (excluding connections establishing)

פרשנות: המסד נתונים מסוגל להתמודד עם 2500 עסקאות בשנייה תחת עומס זה.

אם TPS נמוך יותר מהצפוי, נתח את תוכניות השאילתות באמצעות EXPLAIN ANALYZE כדי לזהות נקודות צוואר בוערות בביצועים.

מסקנה

בדיקת ביצועים של PostgreSQL היא דרך חזקה לזהות מגבלות ביצועים ולמטב את מסד הנתונים שלך למגוון עומסי עבודה. כלים כמו pgbench ו-sysbench, בשילוב עם תובנות מ-pg_stat_statements, מאפשרים לך לחקות תרחישים מציאותיים ולהתאים במדויק את הגדרות PostgreSQL.

על ידי שליטה בכלים ובטכניקות אלו, תוכל להבטיח שהמופע של PostgreSQL שלך מספק ביצועים גבוהים גם ליישומים עתירי קריאה וגם ליישומים כבדי כתיבה.

Source:
https://dzone.com/articles/how-to-benchmark-postgresql-for-optimal-performance