כדי להעריך את התפוקה ואת זמן האחזור של עומסי העבודה של העסקאות ב-AlloyDB ל-PostgreSQL, אתם יכולים להגדיר את AlloyDB ואת מכונת הלקוח להשוואה בין ביצועי עיבוד העסקאות אונליין (OLTP) באמצעות TPC-C, מפרט להשוואה בין ביצועי OLTP שהוא הסטנדרט בתחום. אפשר גם להריץ תרחישי OLTP מותאמים אישית עם הרבה פעולות קריאה וכתיבה, כמו Index Insert Only ו-Select Only.
ההוראות במאמר הזה מבוססות על הגדרה ספציפית של AlloyDB ושל מכונת הלקוח. משתמשים בערכים שסופקו לכל שלב בהוראות להשוואה לשוק.
יכולות של עומסי עבודה ב-AlloyDB
AlloyDB מספק אמינות, יכולת התאמה וביצועים ברמה שמתאימה לארגונים, לכל העסקים ולעומסי עבודה קריטיים. AlloyDB מספק את הרכיבים והתכונות הבאים, שמאפשרים ביצועים גבוהים לעומסי העבודה של הטרנזקציות (OLTP), הניתוח (OLAP) וההיברידיים (HTAP):
- ניהול יומנים ועסקאות
- ניהול זיכרון דינמי
- שילוב של בינה מלאכותית (AI) ולמידת מכונה (ML)
- מנוע מבוסס-עמודות מובנה
- מטמון בכמה רמות
- אחסון מבוזר וניתן להתאמה
במערכות של מסדי נתונים רלציוניים, בדרך כלל צריך מנהל מסד נתונים כדי לבצע אופטימיזציה של מסד הנתונים לצורך השוואה, כולל הגדרת היומן של הטרנזקציות, קביעת הגדלים הנכונים של מאגר המאגרים ושינוי פרמטרים או דגלים ומאפיינים אחרים של מסד הנתונים. ההגדרות האלה משתנות בהתאם לגודל ולסוג של המכונה.
AlloyDB מוגדר מראש עם הגדרות אופטימליות לכל סוג מכונה. ב-AlloyDB לא צריך לשנות את הדגלים ברמת מסד הנתונים כדי להשיג ביצועי OLTP גבוהים, כי הם כבר מובנים ב-AlloyDB.
סוגי נקודות ההשוואה הנתמכים
במאמר הזה נסביר איך להריץ בדיקות השוואה של OLTP באמצעות הכלים הבאים:
| מנהלי התקנים להשוואת ביצועים של OLTP | תרחישי שימוש |
|---|---|
| HammerDB | HammerDB מודד את ביצועי המערכת במונחים של טרנזקציות לדקה (TPM) ומפיק דוחות שכוללים נתונים סטטיסטיים מפורטים ומדדים לבדיקת ביצועים.
ב-HammerDB אפשר להתאים אישית את הפרמטרים של ההשוואה לשוק, וכך לשנות את גודל מסד הנתונים, את מספר המחסנים ומאפיינים אחרים של עומס העבודה כדי לדמות תרחישים שונים. HammerDB כולל הטמעה של השוואה לשוק של TPC-C כדי להעריך את הביצועים של מערכות OLTP. ההטמעה של HammerDB TPC-C מאפשרת לדמות עומס עבודה שדומה ל-TPC-C, כולל שילוב של טרנזקציות שמדמות את ההתנהגות של סביבת ספק סיטונאי. |
| pgbench | pgbench הוא כלי להשוואה בין ביצועים שמגיע עם PostgreSQL. בעזרת pgbench אפשר לדמות עומסי עבודה של טרנזקציות כמו הוספה, עדכון ובחירת נתונים, ולמדוד את הביצועים של מערכת מסד הנתונים בטרנזקציות לשנייה (TPS). כשמשתמשים ב-pgbench, אפשר להתאים אישית את גודל מסד הנתונים, את מספר הלקוחות ואת שילוב העסקאות כדי לדמות את עומס העבודה בסביבת הייצור, ולקבל תובנות לגבי התנהגות המערכת בתרחישים שונים. pgbench כולל הטמעה של TPC-B. ההטמעה של pgbench TPC-B דומה לבדיקת ביצועים של TPC-B. |
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the AlloyDB, Compute Engine, and Resource Manager APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
מפעילים את ממשקי ה-API של Cloud שנדרשים כדי ליצור מכונות של AlloyDB ל-PostgreSQL ולהתחבר אליהן.
בשלב Confirm project, לוחצים על Next כדי לאשר את שם הפרויקט שבו רוצים לבצע שינויים.
בשלב Enable APIs, לוחצים על Enable כדי להפעיל את ממשקי ה-API הבאים:
- AlloyDB API
- Compute Engine API
- Cloud Resource Manager API
- Service Networking API
צריך את Service Networking API אם מתכננים להגדיר קישוריות רשת ל-AlloyDB באמצעות רשת VPC שנמצאת באותו פרויקט ב- Google Cloud כמו AlloyDB.
אם אתם מתכננים להגדיר קישוריות רשת ל-AlloyDB באמצעות רשת VPC שנמצאת בפרויקט אחר ב- Google Cloud , אתם צריכים את Compute Engine API ואת Cloud Resource Manager API.
הגדרה והקצאה של מסד הנתונים ומכונת הלקוח
כדי להתחיל את הבדיקה, יוצרים אשכול ומכונה של AlloyDB. אלא אם צוין אחרת, המידע במסמך הזה מבוסס על מכונה ראשית של AlloyDB עם 16 vCPU ו-128GB RAM.
יצירת אשכול ומכונה של AlloyDB
נכנסים לדף Clusters.
לוחצים על Create Cluster.
בשדה Cluster ID, מזינים שם לאשכול.
בקטע Zonal availability, בוחרים באפשרות Multiple zones (Highly Available) בתור סוג האשכול.
בוחרים את רשת ברירת המחדל.
בשדה Database version, בוחרים אחת מהאפשרויות הבאות:
PostgreSQL בגרסה 17
PostgreSQL 18
שימו לב למיקום של האזור הראשי ולכתובת ה-IP הפרטית. אל תיצרו מאגר קריאה.
לוחצים על Create Cluster.
הקצאת מכונת הלקוח
כדי להריץ בדיקות השוואה של OLTP, צריך מכונה של לקוח עם כוח עיבוד מתאים. כלי השוואה כמו HammerDB ו-pgbench פועלים באופן מקבילי מאוד וצורכים הרבה משאבי מעבד (CPU). מכונת הלקוח לא יכולה להיות צוואר בקבוק כשמריצים בדיקת ביצועים של OLTP.
אלא אם צוין אחרת, ההוראות במסמך הזה משתמשות במכונה E2-standard-32 עם דיסק בנפח 128GB כלקוח לבדיקות השוואתיות של OLTP, כדי להפעיל מכונה של AlloyDB במכונה עם 16 vCPU ו-RAM בנפח 128GB. צריך ליצור את מכונת הלקוח באותו אזור שבו נמצא המכונה הראשית של AlloyDB.
כדי להריץ את מבחן הביצועים TPC-C במכונה ראשית של AlloyDB עם 16 מעבדים וירטואליים, צריך ליצור מכונה וירטואלית של Compute Engine ולהקצות מכונת לקוח:
נכנסים לדף VM instances במסוף Google Cloud .
- בוחרים את הפרויקט שמכיל את המכונה של AlloyDB שאליה רוצים להתחבר.
- לוחצים על Create instance.
- לוחצים על הקטע Machine configuration.
- מזינים שם למכונה.
- מגדירים את האזור שבו רוצים ליצור את המכונה. האזור חייב להיות זהה לאזור של המכונה הראשית של AlloyDB.
- בוחרים את סוג המכונה e2-standard-32.
- משאירים את ערכי ברירת המחדל בקטע OS and Storage.
- לוחצים על הקטע Networking ומגדירים את Network interfaces לרשת ה-VPC שהוגדרה לגישה לשירותים פרטיים ב-AlloyDB.
אם האפשרות Network interfaces לא מוגדרת לרשת ה-VPC שהוגדרה לגישה לשירותים פרטיים, מרחיבים אותה ומגדירים את Network לרשת ה-VPC. - משאירים את ערכי ברירת המחדל בקטע Observability.
- לוחצים על הקטע אבטחה.
- בקטע Identity and API access, מגדירים את היקפי גישה ל-Allow full access to all Cloud APIs.
- משאירים את ערכי ברירת המחדל בקטע Advanced.
- לוחצים על יצירה.
- אחרי שיוצרים את המכונה הווירטואלית, מתחברים למכונה הווירטואלית של Compute Engine שיצרת באמצעות SSH.
הגדרת מכונת הדרייבר לבדיקת הביצועים
אחרי שמתקינים ומגדירים את מסד הנתונים ואת מכונת הלקוח, מגדירים את מכונת הלקוח שפועלת ב- Google Cloud, שבה מתקינים כלים להשוואה כמו HammerDB ו-pgbench.
כדי להגדיר את מכונת מנהל ההתקן של נקודת ההשוואה, מבצעים את השלבים הבאים:
מתחברים למכונת הלקוח באמצעות הפקודה הבאה של
gcloud compute ssh:gcloud compute ssh --zone "PRIMARY_ZONE" "CLIENT_MACHINE_NAME" --project "GOOGLE_PROJECT"מתקינים את הלקוח של PostgreSQL.
משתמשים בפקודה הבאה כדי להתקין לקוח PostgreSQL שכולל אפליקציית psql, ואז מוודאים שאפשר להתחבר.
sudo apt-get update sudo apt install postgresql-clientכדי לוודא שהלקוח פועל ושאפשר להתחבר ל-AlloyDB, משתמשים בפקודה הבאה: משתמשים בכתובת ה-IP הפרטית של המכונה הראשית ב-AlloyDB.
psql -h PRIVATE_IP -U postgres
מריצים את הפקודות הבאות כדי להתקין את מנהל ההתקן HammerDB-4.6 לבדיקת הביצועים של TPC-C:
mkdir hammerdb pushd hammerdb curl -OL https://github.com/TPC-Council/HammerDB/releases/download/v4.6/HammerDB-4.6-Linux.tar.gz tar zxvf HammerDB-4.6-Linux.tar.gzכדי להתקין את מנהל ההתקן של pgbench ל-TPC-B ולבדיקות ביצועים שונות של OLTP, מריצים את הפקודות הבאות:
sudo apt-get update sudo apt-get install postgresql-contrib pgbench --versionאם הפקודה
pgbench --versionפועלת בלי שגיאות, סימן ש-pgbench מותקן.
ביצוע ניקוי של הערכת הביצועים
אם אתם מתכננים להריץ כמה נקודות השוואה ברצף, אתם צריכים לבצע ניקוי בין כל נקודת השוואה כדי להבטיח תוצאות מדויקות ואמינות.
ניקוי של נקודת ההשוואה מבטיח שההשפעות השיוריות מנקודות ההשוואה הקודמות לא ישפיעו על מדידות הביצועים של נקודת ההשוואה החדשה. ניקויים של נקודות השוואה עוזרים גם להבטיח עקביות וחזרה על תוצאות נקודות ההשוואה, וזה חיוני כדי לבצע השוואות משמעותיות בין מערכות שונות או לזהות תחומים לאופטימיזציה בחומרה, בתוכנה או בהגדרות האישיות.
כדי לבצע ניקוי של נקודת השוואה לפני שמריצים נקודת השוואה אחרת:
מוחקים את נתוני ההערכה הקודמים או את מסד הנתונים של ההערכה. כדי למחוק את מסד הנתונים הקודם של הבדיקה, מריצים את הפקודה הבאה של
psqlמהמכונה של הלקוח:psql -h PRIVATE_IP -U postgres -c "DROP DATABASE IF EXISTS <database_name>;"מידע נוסף על השימוש ב-
psqlזמין במאמר התחברות למסד נתונים.מפעילים מחדש את המכונה של AlloyDB. בשלב הזה מנקים את המטמון ברמת מסד הנתונים ומערכת ההפעלה.
הרצת בדיקת ביצועים של TPC-C
HammerDB הוא כלי להשוואה בין ביצועים שכולל הטמעה של השוואת ביצועים מסוג TPC-C, כדי להעריך את הביצועים של מערכות OLTP. ההטמעה של TPC-C ב-HammerDB מאפשרת לדמות עומס עבודה שדומה ל-TPC-C, כולל שילוב של טרנזקציות שמדמות את ההתנהגות של סביבת ספק סיטונאי.
HammerDB מודד את ביצועי המערכת במונחים של טרנזקציות לדקה (TPM) ומפיק דוחות שכוללים נתונים סטטיסטיים מפורטים ומדדים לבדיקת ביצועים. בנוסף, HammerDB תומך בהתאמה אישית של הפרמטרים של נקודת ההשוואה, כך שהמשתמשים יכולים לשנות את גודל מסד הנתונים, את מספר המחסנים ומאפיינים אחרים של עומס העבודה כדי לדמות תרחישים שונים.
תרחישים של הערכת ביצועים
הביצועים של בדיקת השוואה של TPC-C מוערכים בשיטות הבאות:
מצב שמירה חלקית במטמון (כ-30%): במצב הזה נוצר מסד נתונים גדול של TPC-C, שיכול להתאים רק באופן חלקי למטמון המאגר. הטרנזקציות במצב הזה לא תמיד מוגשות מהזיכרון, והן גורמות לקלט/פלט לתת-המערכות של האחסון הבסיסי. התרחיש הזה רלוונטי לצרכים של משתמשים רבים ב-OLTP.
מצב שמירה מלאה במטמון (100%): במצב הזה, מסד הנתונים של TPC-C מתאים באופן מלא למטמון המאגר. המכונה של AlloyDB משתמשת בכ-90% מ-128GB של זיכרון ה-RAM הזמין, כולל מטמון המאגר.
מכיוון שטרנזקציות TPC-C מבצעות פעולות קלט/פלט מינימליות – כי הקריאות מוגשות בעיקר מהמטמון של מאגר הנתונים הזמני – במצב הזה צפוי TPM גבוה יותר בהשוואה להרצות ששמורות חלקית במטמון. התרחיש הזה רלוונטי לצורכי OLTP של משתמשים עם צורכי קלט/פלט נמוכים מאוד.
הגדרת מכונת הלקוח
אם אתם מריצים כמה בדיקות ברצף, בצעו ניקוי של הבדיקה.
פותחים את
hammerdb/HammerDB-4.6 directoryבאמצעות הפקודה הבאה:cd hammerdb/HammerDB-4.6מריצים פקודות מהספרייה הזו כדי להגדיר את מכונת הלקוח.
יוצרים את הקובץ
setup.envבאמצעות הפקודות הבאות:cat << EOF > setup.env# Private IP of the AlloyDB primary instance export PGHOST=PRIVATE_IP# Postgres default port address. You do not need to change it unless you use non-default port address. export PGPORT=5432 # default port to connect with postgres# Number of TPC-C warehouses to load. This determines the overall database size. export NUM_WAREHOUSE=576# Number of users for running the benchmark. export NUM_USERS=256 EOFעורכים את הקובץ
setup.envשנוצר ומחליפים את כל ערכי הפרמטרים המודגשים בערכי פרמטרים שמתאימים להגדרת הסביבה שלכם.אופציונלי: בודקים את מצב השמירה החלקית במטמון (כ-30%) על ידי שינוי של
NUM_WAREHOUSEל-3200בקובץsetup.env. מידע נוסף זמין במאמר תרחישים להערכת ביצועים.אופציונלי: בודקים את מצב השמירה המלאה (100%) במטמון על ידי שינוי של
NUM_WAREHOUSEל-576ב-setup.env file. מידע נוסף זמין במאמר תרחישים להערכת ביצועים.
טעינת נתוני TPC-C למסד הנתונים
שלב הטעינה הוא התהליך שבו מאכלסים את מסד הנתונים של נקודת ההשוואה בנתונים ראשוניים לפני הרצת בדיקת הביצועים.
בשלב הטעינה, מסד הנתונים מאוכלס במספר מסוים של מחסנים, לקוחות וישויות אחרות בהתאם למפרט של TPC-C. מטרת שלב הטעינה היא ליצור עומס עבודה מציאותי לבדיקת הביצועים, ולוודא שאפשר להשוות בין תוצאות הבדיקה במערכות שונות.
אחרי ששלב הטעינה מסתיים, מסד הנתונים נמצא במצב עקבי עם קבוצה מוגדרת של נתונים ראשוניים, ומוכן לשימוש בבדיקת הביצועים של TPC-C.
כדי לטעון את מסד הנתונים של TPC-C:
עוברים לספריית הבית של הבדיקה באמצעות הפקודה הבאה:
cd hammerdb/HammerDB-4.6מעתיקים את התוכן הבא ומדביקים אותו ב-
build-tpcc.sh:#!/bin/bash -x source ./setup.env # create role tpcc with superuser login as 'postgres' and password as 'AlloyDB#123'; # ----------------------------------------------------- ./hammerdbcli << EOF # CONFIGURE PARAMETERS FOR TPCC BENCHMARK # -------------------------------------- dbset db pg dbset bm tpc-c # CONFIGURE POSTGRES HOST AND PORT # -------------------------------------- diset connection pg_host $PGHOST diset connection pg_port $PGPORT # CONFIGURE TPCC # -------------------------------------- diset tpcc pg_superuser postgres diset tpcc pg_superuserpass AlloyDB#123 diset tpcc pg_user tpcc diset tpcc pg_pass AlloyDB#123 diset tpcc pg_dbase tpcc # SET NUMBER OF WAREHOUSES AND USERS TO MANAGE EACH WAREHOUSE # THIS IMPORTANT METRIC ESTABLISHES THE DATABASE SCALE/SIZE # -------------------------------------- diset tpcc pg_count_ware $NUM_WAREHOUSE diset tpcc pg_num_vu 10 # LOG OUTPUT AND CONFIGURATION DETAILS # -------------------------------------- vuset logtotemp 1 print dict # CREATE AND POPULATE DATABASE SCHEMA # -------------------------------------- buildschema waittocomplete vudestroy quit EOFמריצים את פקודת הטעינה הבאה וממתינים עד שהיא תסתיים.
chmod +x ./build-tpcc.sh mkdir results sudo nohup ./build-tpcc.sh > results/build-tpcc.out 2>&1מאמתים את הטעינה. אחרי שהסקריפט הקודם מסתיים, מומלץ לוודא שהטעינה של מסד הנתונים בוצעה בהצלחה. כדי לבדוק את גודל מסד הנתונים, מריצים את הפקודה הבאה:
psql -h $PGHOST -p 5432 -U postgres postgres=> \l+ tpcc List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description --------------+------------------+----------+---------+---------+---------------------------------------+---------+------------+-------------------------------------------- tpcc | tpcc | UTF8 | C.UTF-8 | C.UTF-8 | | --- GB | pg_default | | | | | | | 160.000 | | (1 row)
במערך TPC-C עם 30% מטמון (עם 3,200 מחסנים), הגודל של מסד הנתונים של tpcc צפוי להיות בערך 300GB.
בהגדרת TPC-C עם 100% מטמון (עם 576 מחסנים), גודל מסד הנתונים של tpcc צפוי להיות כ-55GB.
הרצת נקודת ההשוואה של TPC-C
עכשיו אפשר להריץ את בדיקת הביצועים של TPC-C. מבחן הביצועים של TPC-C מופעל באמצעות מסד הנתונים שאוכלס משלב הטעינה. בדיקת הביצועים יוצרת סדרה של טרנזקציות שמדמות סביבה עסקית אופיינית, כולל הזנת הזמנות, עיבוד תשלומים וניהול מלאי. עומס העבודה נמדד בעסקאות לדקה (TPM), שמייצגות את מספר העסקאות המלאות שהמערכת יכולה לטפל בהן בדקה אחת.
שלב ההרצה נועד להעמיס על מערכת מסד הנתונים בתנאים מציאותיים, ולספק דרך סטנדרטית למדידת הביצועים שאפשר להשוות בין מערכות שונות של מסדי נתונים. ספקים ומשתמשים משתמשים לעיתים קרובות בתוצאות של נקודת ההשוואה TPC-C כדי להעריך את הביצועים של מערכות שונות של מסדי נתונים ושל הגדרות חומרה שונות.
כדי להריץ את בדיקת ההשוואה של TPC-C:
עוברים לספריית הבית של נקודת ההשוואה:
cd hammerdb/HammerDB-4.6מעתיקים את התוכן הבא ומדביקים אותו ב-
run-tpcc.sh:#!/bin/bash -x source ./setup.env ./hammerdbcli << EOF dbset db pg dbset bm tpc-c # CONFIGURE PG HOST and PORT # ------------------------- diset connection pg_host $PGHOST diset connection pg_port $PGPORT # CONFIGURE TPCC DB # ------------------------- diset tpcc pg_superuser postgres diset tpcc pg_superuserpass AlloyDB#123 diset tpcc pg_user postgres diset tpcc pg_pass AlloyDB#123 diset tpcc pg_dbase tpcc # BENCHMARKING PARAMETERS # ------------------------- diset tpcc pg_driver timed diset tpcc pg_rampup 10 diset tpcc pg_duration 60 diset tpcc pg_vacuum false diset tpcc pg_partition false diset tpcc pg_allwarehouse true diset tpcc pg_timeprofile true diset tpcc pg_connect_pool false diset tpcc pg_dritasnap false diset tpcc pg_count_ware $NUM_WAREHOUSE diset tpcc pg_num_vu 1 loadscript print dict vuset logtotemp 1 vuset vu $NUM_USERS vucreate vurun waittocomplete quit EOFמריצים את הסקריפט באמצעות הפקודות הבאות:
chmod +x run-tpcc.sh mkdir results sudo nohup ./run-tpcc.sh > results/run-tpcc.out 2>&1מחכים שהסקריפט
run-tpcc.shיסתיים. הסקריפט פועל במשך כשעה ו-10 דקות. אחרי שהסקריפט מסתיים, אפשר לנתח את התוצאות.
ניתוח תוצאות ההערכה
בבדיקת ביצועים של TPC-C, המדדים "הזמנות חדשות לדקה" (NOPM) ו"טרנזקציות לדקה" (TPM) משמשים למדידת הביצועים של מערכת מסד נתונים.
NOPM: מודד את מספר העסקאות של הזמנות חדשות שהמערכת יכולה לטפל בהן בדקה אחת. הטרנזקציה של הזמנה חדשה היא אחת מהטרנזקציות החשובות ביותר בבנצ'מרק TPC-C, והיא כוללת יצירת הזמנה חדשה ללקוח.
TPM: מודד את המספר הכולל של עסקאות שהושלמו שהמערכת יכולה לטפל בהן בדקה אחת. הטרנזקציות כוללות טרנזקציות של הזמנות חדשות וגם סוגים אחרים של טרנזקציות שמוגדרים בבנצ'מרק TPC-C, כמו תשלום, משלוח וסטטוס הזמנה.
המדד TPM הוא מדד לבדיקת ביצועים העיקרי של מבחן הביצועים TPC-C, כי הוא מספק מדד כולל ליכולת של המערכת להתמודד עם עומס עבודה מציאותי. המדד NOPM יכול להיות שימושי למערכות שמתמקדות בעיבוד הזמנות חדשות, כמו מערכות של מסחר אלקטרוני או קמעונאות.
הצגת התוצאות עם 30% מטמון של מסד נתונים TPC-C במכונה עם 16 מעבדי vCPU
כדי לחלץ את נתוני הביצועים בתרחיש הזה, משתמשים בפקודה הבאה:
grep NOPM results/run-tpcc.outהפלט הצפוי:
Vuser 1:TEST RESULT : System achieved 252970 NOPM from 582385 PostgreSQL TPM
עם מסד נתונים של TPC-C ש-30% ממנו נשמר במטמון במכונה עם 16 מעבדי vCPU (עם NUM_WAREHOUSE=3200 ו-NUM_USERS=256), אתם רואים 252,970 tpm-C (הזמנות חדשות לדקה) מתוך 582,385 TPM מצטברים של AlloyDB.
הצגת התוצאות עם מסד נתונים TPC-C שכולו במטמון במכונה עם 16 מעבדי vCPU
במסד נתונים TPC-C ששמור ב-100% במטמון במכונה עם 16 מעבדי vCPU (עם NUM_WAREHOUSE=576 ו-NUM_USERS=256), מתקבלים 428,316 tpm-C (הזמנות חדשות לדקה) מתוך 974,264 TPM מצטברים ב-AlloyDB.
כדי לחלץ את נתוני הביצועים של התרחיש הזה, משתמשים בפקודה הבאה:
grep NOPM results/tpcc-run.outהפלט הצפוי:
Vuser 1:TEST RESULT : System achieved 428316 NOPM from 974264 PostgreSQL TPM
סיכום של תוצאות הביצועים במכונה עם 16 מעבדי vCPU
בטבלה הבאה מוצג סיכום של תוצאות בדיקת הביצועים של מכונה עם 16 מעבדי vCPU:
| תרחיש TPC-C | NUM_WAREHOUSE | NUM_USERS | NOPM | TPM מצטבר |
|---|---|---|---|---|
| 30% נשמרו במטמון | 3200 | 256 | 252,970 | 582,385 |
| 100% נשמר במטמון | 576 | 256 | 428,316 | 974,264 |
צפייה במדדי הביצועים של מסד הנתונים
כדי להבין טוב יותר את ההתנהגות של מערכת מסד הנתונים, אתם יכולים להשתמש בכלי המעקב של AlloyDB כדי לבחון מדדי מערכת חשובים כמו שימוש במעבד (CPU), שימוש בזיכרון ועסקאות לשנייה. מידע נוסף מופיע במאמר מעקב אחרי ביצועי המכונה.
לדוגמה, אחרי הרצת הבדיקה הזו, בדף Overview של AlloyDB במסוף Google Cloud אפשר לראות שניצול ה-CPU הממוצע להרצת TPC-C במטמון של 100% הוא כמעט 90%.
הרצת הערכת ביצועים של TPC-C במכונה של AlloyDB עם 64 מעבדי vCPU
כדי להריץ בדיקת השוואה של TPC-C במכונה של AlloyDB עם 64 מעבדי vCPU, מבצעים את אותם שלבי הגדרה כמו בהרצת בדיקת השוואה של TPC-C, אבל משתמשים בסוגי מכונות שונים.
הגדרת AlloyDB ומכונת הלקוח
יוצרים אשכול ומכונה של AlloyDB, ומחליפים את סוג המכונה ב-
64 vCPU, 512GB.מקצים את מכונת הלקוח, ומחליפים את
n2-standard-64בסוג המכונה.
הרצת הערכת הביצועים
אם אתם מריצים כמה בדיקות ברצף, בצעו ניקוי של הבדיקה.
מגדירים את מכונת הלקוח, ומחליפים את הערכים הבאים:
- מגדירים את
PGHOSTלכתובת ה-IP הפרטית של המכונה החדשה של AlloyDB עם 64 מעבדי vCPU. - בתרחיש של 30% Cached TPC-C, מגדירים את
NUM_WAREHOUSE=12800ו-NUM_USERS=1024. - בתרחיש של 100% Cached TPC-C, מגדירים את
NUM_WAREHOUSE=2304ו-NUM_USERS=1024.
- מגדירים את
הגדרה וטעינה של מסד נתונים של TPC-C. כדי לטעון מהר יותר, משנים את הערך של
pg_num_vuל-64 ב-build-tpcc.shבתורdiset tpcc pg_num_vu 64.
ניתוח תוצאות ההערכה
בטבלה הבאה מוצג סיכום של תוצאות הערכת הביצועים במכונה עם 64 מעבדי vCPU:
| מצב הערכת ביצועים | NUM_WAREHOUSE | NUM_USERS | NOPM | TPM מצטבר |
|---|---|---|---|---|
| 30% נשמרו במטמון | 12800 | 1024 | 589,598 | 1,371,160 |
| 100% נשמר במטמון | 2304 | 1024 | 716,138 | 1,665,438 |
הרצת הערכת ביצועים של pgbench TPC-B
TPC-B (Transaction Processing Performance Council Benchmark B) הוא אחד ממצבי ההשוואה שזמינים ב-pgbench, כלי להשוואה של PostgreSQL. TPC-B מדמה תרחיש בנקאי שבו כמה כספרים מבצעים עסקאות בחשבונות של לקוחות. עומס העבודה מורכב מהסוגים הבאים של טרנזקציות:
- הפקדות
- משיכות
- בירורי יתרה
בדיקת הביצועים מודדת את הביצועים של מערכת מסד הנתונים על ידי הדמיה של שילוב של הטרנזקציות האלה, ומדידת מספר הטרנזקציות לשנייה שהמערכת יכולה לטפל בהן.
מצב TPC-B ב-pgbench יוצר מסד נתונים סינתטי ומדמה שילוב של טרנזקציות שדומה לעומס העבודה של TPC-B, אבל הוא לא מאושר באופן רשמי על ידי ארגון TPC. לכן, למרות שמצב TPC-B ב-pgbench מספק הערכה שימושית של ביצועי TPC-B, אל תשתמשו בו כדי לטעון לתאימות לתקני TPC-B.
תרחישים למדידת ביצועים
בקטע הזה מוסבר איך למדוד את הביצועים של TPC-B במצבים הקריטיים הבאים. הפרמטר היחיד ששונה במצבים האלה הוא הערך של הפרמטר SCALE_FACTOR.
תרחיש של מסד נתונים שנשמר חלקית במטמון
בתרחיש הזה, אתם מגדירים ומפעילים מסד נתונים גדול (בגודל של כ-650GB) באמצעות --scale= 50000. מסד נתונים גדול שלא מתאים לזיכרון וגורם לקלט/פלט משמעותי בדיסק, מספק ייצוג מציאותי של עומסי עבודה רבים בסביבת הייצור.
מסד נתונים גדול שגורם לקלט/פלט משמעותי בדיסק יכול להדגיש את החשיבות של תכנון מסד הנתונים ושל אופטימיזציה של שאילתות. מסד נתונים גדול יכול גם לחשוף בעיות בביצועים שקשורות לקלט/פלט של הדיסק, כמו גישה איטית לדיסק או שאילתות לא יעילות, שאולי לא יופיעו במסד נתונים קטן או במסד נתונים שכולו נמצא בזיכרון.
תרחיש של מסד נתונים שכולו במטמון
בתרחיש הזה, אתם מגדירים ומפעילים מסד נתונים בגודל של כ-60GB באמצעות --scale=4000, כך שהוא נמצא במאגר המאגרים הזמניים. חשוב לבצע השוואה של מסד נתונים שמאוחסן בזיכרון, כי כך אפשר להעריך את הביצועים המקסימליים של מערכת מסד הנתונים בסביבה מבוקרת.
מסד נתונים שמאוחסן בזיכרון שומר את כל הנתונים במאגר המאגרים של PostgreSQL, וכך מבטל את צוואר הבקבוק של הקלט/פלט שיכול להתרחש כשניגשים לנתונים מהדיסק. המצב הזה יכול לעזור לזהות צווארי בקבוק בביצועים שלא קשורים לקלט/פלט, כמו שימוש במעבד או בעיות נעילה, שאולי לא יהיו ברורים כשמבצעים השוואה של מסד נתונים שמסתמך על קלט/פלט של דיסק.
הגדרת שרת מסד הנתונים ומכונת הלקוח
כדי להגדיר את התשתית להרצת בדיקת השוואה של pgbench TPC-B, מבצעים את השלבים הבאים:
יוצרים אשכול ומכונה של AlloyDB, ומחליפים את סוג המכונה ב-
16 vCPU, 128GB.מקצים את מכונת הלקוח, ומחליפים את סוג המכונה ב-
E2-standard-16 (minimum).
הרצת הערכת הביצועים של pgbench TPC-B
מתחברים למכונת הלקוח באמצעות הפקודה הבאה של Google Cloud CLI:
gcloud compute ssh --zone "PRIMARY_ZONE" "CLIENT_MACHINE_NAME" --project "GOOGLE_PROJECT"יוצרים את הקובץ
pgbench-setup.env:$ cat << EOF > pgbench-setup.env # Private IP of the AlloyDB primary instance export PGHOST=<private_ip> # Set PGUSER to postgres as a default user. export PGUSER=postgres # Password set for PGUSER export PGPASSWORD=<your pg password> # In pgbench, the scale factor represents the size of the test database. # and is defined as the number of 1 MB-sized data pages to be generated per client. export SCALE_FACTOR=<scale_factor> # Number of clients to drive the benchmark in throughput mode export NUM_CLIENTS=<num_clients> EOFעורכים את קובץ
setup.envשנוצר ומחליפים את ערך הפרמטר הבא בערכים שמתאימים להגדרת הסביבה שלכם.- PRIVATE_IP: כתובת ה-IP הפרטית של המכונה ב-AlloyDB.
אתם יכולים להיעזר בטבלה הבאה כדי לבחור את הערכים של
<scale_factor>ו-<num_clients>. הערכים האלה צריכים להיות מותאמים לסוג המכונה ולגודל מסד הנתונים (שמירה מלאה או חלקית במטמון). בדוגמאות שבמדריך הזה נעשה שימוש בערכים שלSCALE_FACTORו-NUM_CLIENTשתואמים לסוג המכונהn2-highmem-16.Fully Cached נשמר חלקית במטמון סוג מכונה SCALE_FACTOR NUM_CLIENTS SCALE_FACTOR NUM_CLIENTS n2-highmem-2 500 48 6250 32 n2-highmem-4 1000 96 12500 64 n2-highmem-8 2000 192 25000 128 n2-highmem-16 4000 384 50000 256 n2-highmem-32 8000 768 100000 512 n2-highmem-64 16000 1536 200000 1024 יוצרים מסד נתונים ב-
pgbench.source ./pgbench-setup.env psql -h $PGHOST -p 5432 postgres=> create database pgbench; CREATE DATABASEמאתחלים וטוענים את מסד הנתונים של pgbench באמצעות הפקודות הבאות: השלב הזה מבטיח שקבוצת הנתונים להשוואה נוצרת ומאוכלסת בנתונים מציאותיים, שמאפשרים לדמות במדויק עומס עבודה של TPC-B במסד הנתונים של pgbench.
source ./pgbench-setup.env sudo nohup pgbench -i --host=$PGHOST --scale=$SCALE_FACTOR pgbench > /tmp/pgbench-tpcb-partially-cached-db-init.out 2>&1זמני טעינה צפויים:
- טעינת מסד הנתונים שנשמר חלקית במטמון נמשכת כ-6 שעות.
- טעינת מסד הנתונים ששמור במלואו במטמון נמשכת כ-45 דקות.
אופציונלי: כדי לבדוק את דיוק הטעינה, מוודאים שהתוכן של הקובץ
/tmp/pgbench-tpcb-partially-cached-db-init.outדומה לתוכן הבא:generating data (client-side)... 100000 of 400000000 tuples (0%) done (elapsed 0.02 s, remaining 99.82 s) .. .. .. .. .. .. 399800000 of 400000000 tuples (99%) done (elapsed 534.60 s, remaining 0.27 s) 399900000 of 400000000 tuples (99%) done (elapsed 534.72 s, remaining 0.13 s) 400000000 of 400000000 tuples (100%) done (elapsed 534.85 s, remaining 0.00 s) vacuuming... creating primary keys... done in 1481.92 s (drop tables 0.01 s, create tables 0.04 s, client-side generate 540.93 s, vacuum 615.11 s, primary keys 325.84 s).אופציונלי: כדי לוודא שהעומס תקין, מריצים את הפקודה הבאה ב-PostgreSQL, שמודדת את הגודל של כל הטבלאות ב-pgbench:
מתחברים למסד הנתונים של pgbench:
source ./pgbench-setup.env psql -h $PGHOST -p 5432 -U postgres -d pgbenchמריצים את פקודת ה-SQL הבאה:
pgbench=> SELECT nspname AS schema_name, relname AS table_name, pg_size_pretty(pg_total_relation_size(C.oid)) AS size FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema' ORDER BY pg_total_relation_size(C.oid) DESC;משווים בין הפלט של הפקודה הקודמת לבין הפלט שקיבלתם מהרצת מסד הנתונים שנשמר חלקית במטמון (
SCALE_FACTOR=50000).schema_name | table_name | size -------------+-------------------------------------------+--------- public | pgbench_accounts | 731 GB public | pgbench_accounts_pkey | 105 GB public | pgbench_tellers | 32 MB public | pgbench_tellers_pkey | 11 MB public | pgbench_branches | 2952 kB public | pgbench_branches_pkey | 1112 kB .. .. .. public | pgbench_history | 0 bytes .. .. .. (29 rows)
מריצים את הפקודות הבאות כדי לדמות עומס עבודה של מערכת חשבונאות פיננסית, על ידי ביצוע סדרה של טרנזקציות שכוללות הפקדות, העברות ותשלומים. כך אפשר למדוד את ביצועי מסד הנתונים בעומס עבודה כבד.
source ./pgbench-setup.env mkdir -p ~/results/alloydb/pgbench sudo nohup pgbench --host=$PGHOST --builtin=tpcb-like --time=3900 --jobs=$NUM_CLIENTS --client=$NUM_CLIENTS --scale=$SCALE_FACTOR --protocol=prepared --progress=1 pgbench > ~/results/alloydb/pgbench/pgbench.run.out 2>&1
ניתוח תוצאות ההערכה
בודקים את הפלט של הפקודה הקודמת בקובץ ~/results/alloydb/pgbench/pgbench.run.out. מספר ה-TPS צריך להיות קרוב למספרים שמוצגים בתרחישים של מסד נתונים ששמור במטמון באופן מלא ושל מסד נתונים ששמור במטמון באופן חלקי.
תוצאות עם מסד נתונים שנשמר במלואו במטמון
הפלט של הפקודה האחרונה בהרצת מבחן הביצועים TPC-B של pgbench אמור להיות דומה לזה, כאשר --scale=4000:
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 4000
query mode: prepared
number of clients: 384
number of threads: 384
duration: 3900 s
number of transactions actually processed: 84819501
latency average = 17.654 ms
latency stddev = 6.963 ms
tps = 21747.831164 (including connections establishing)
tps = 21750.579718 (excluding connections establishing)
כדי להבין טוב יותר את ההתנהגות של מערכת מסד הנתונים, אתם יכולים לעקוב אחרי מדדי המערכת כמו שימוש במעבד (CPU), שימוש בזיכרון ועסקאות לשנייה באמצעות מסוף Google Cloud . מידע נוסף זמין במאמר מעקב אחרי מכונות.
תוצאות עם מסד נתונים שנשמר חלקית במטמון
הפלט של הפקודה האחרונה בהרצת מבחן הביצועים TPC-B של pgbench אמור להיות דומה לזה, כאשר --scale=50000:
pgbench: warning: scale option ignored, using count from pgbench_branches table (50000)
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 50000
query mode: prepared
number of clients: 384
number of threads: 384
duration: 3900 s
number of transactions actually processed: 68073405
latency average = 21.992 ms
latency stddev = 29.272 ms
tps = 17453.913041 (including connections establishing)
tps = 17460.373303 (excluding connections establishing)
סיכום של תוצאות הביצועים של בדיקת ביצועים של pgbench TPC-B
בטבלה הבאה מוצג סיכום של תוצאות הביצועים של נקודת השוואה (benchmark) מסוג pgbench TPC-B:
| תרחיש TPC-B | SCALE_FACTOR | TPS | ניצול המעבד (CPU) (%) |
|---|---|---|---|
| נשמר במטמון באופן חלקי | 50000 | 17,460 | 96% |
| שמירה מלאה במטמון | 4000 | 21,750 | 94% |
הרצת הערכת ביצועים של הוספת אינדקס בלבד
בדיקת ההשוואה Index Insert Only היא תרחיש של כתיבה אינטנסיבית עם בו-זמניות גבוהה, שמותאם אישית בקטע הזה כדי להראות את יתרונות הביצועים של AlloyDB ברוב האפליקציות של OLTP. כדי להריץ את הבדיקה הזו, יוצרים כמה אינדקסים בטבלה pgbench_history ואז מבצעים פעולות INSERT חוזרות בטבלה pgbench_history מכמה חיבורי לקוח.
בדיקות השוואה של הוספה לאינדקס בלבד מודדות את הביצועים של הוספת נתונים לטבלה במסד נתונים, תוך התמקדות ספציפית בהשפעה של האינדקסים על פעולת הכתיבה. הבדיקה הזו מאפשרת לכם להבין כמה מהר אפשר להוסיף שורות חדשות לטבלה עם אינדקסים ובלי אינדקסים, ומדגישה את ההאטה הפוטנציאלית שנגרמת כתוצאה מתחזוקת האינדקס במהלך ההוספות.
AlloyDB משפר את ביצועי הכתיבה של PostgreSQL, מה שמשפר גם את עומסי העבודה של OLTP. כדי לשפר את הביצועים בתרחישי OLTP שכוללים הרבה פעולות כתיבה, AlloyDB מציע חידושים בארכיטקטורה, כולל שכבת מטמון מדורגת שעוזרת בפעולות קריאה, וטכנולוגיה של מנוע אחסון מבוזר וניתן להרחבה לפעולות כתיבה.
הגדרת AlloyDB ומכונת הלקוח
כדי להגדיר את התשתית להרצת בדיקת השוואה של הוספה לאינדקס בלבד, מבצעים את השלבים הבאים:
יוצרים אשכול ומכונה של AlloyDB, ומחליפים את סוג המכונה ב-
16 vCPU and 128 GB RAM.מקצים את מכונת הלקוח, ומחליפים את סוג המכונה ב-
E2-standard-16 (minimum).
הרצת הערכת הביצועים של הוספת אינדקס בלבד
מתחברים למכונת הלקוח באמצעות פקודת הדוגמה הבאה:
gcloud compute ssh --zone "<primary zone>" "<client machine name>" --project "<google-project>"מגדירים את הסביבה באמצעות הפקודה הבאה:
export PGHOST=<private_ip>יוצרים מסד נתונים ב-
pgbenchלפי הדוגמה הבאה. אם מסד הנתונים כבר קיים, צריך למחוק אותו וליצור אותו מחדש.psql -h $PGHOST -p 5432 -U postgres -c "DROP DATABASE IF EXISTS pgbench" psql -h $PGHOST -p 5432 -U postgres -c "CREATE DATABASE pgbench"מאתחלים וטוענים את מסד הנתונים של pgbench כדי לוודא שקבוצת הנתונים של ההשוואה נוצרה ומאוכלסת בנתונים מציאותיים. עורכים את הפרמטרים המודגשים ומריצים את הפקודה הבאה:
sudo nohup pgbench -i --host=$PGHOST --user=postgres --scale=25000 pgbench > /tmp/pgbench-index-insert-only-init.out 2>&1 ... postgres=> create database pgbench; CREATE DATABASE pgbenchמוודאים שהפלט של הפקודה הקודמת דומה לזה:
dropping old tables... creating tables... generating data (client-side)... 100000 of 2500000000 tuples (0%) done (elapsed 0.03 s, remaining 636.43 s) 200000 of 2500000000 tuples (0%) done (elapsed 0.05 s, remaining 649.12 s) .. .. .. .. .. .. 2499900000 of 2500000000 tuples (99%) done (elapsed 3425.42 s, remaining 0.14 s) 2500000000 of 2500000000 tuples (100%) done (elapsed 3425.57 s, remaining 0.00 s) vacuuming... creating primary keys... done in 12851.19 s (drop tables 998.62 s, create tables 0.02 s, client-side generate 3460.33 s, vacuum 5299.93 s, primary keys 3092.29 s).יוצרים את הסקריפט
index-init.sqlבאמצעות הפקודות הבאות:cat > index-init.sql << EOF CREATE INDEX tid ON pgbench_history(tid); CREATE INDEX bid ON pgbench_history(bid); CREATE INDEX aid ON pgbench_history(aid); CREATE INDEX delta ON pgbench_history(delta); CREATE INDEX mtime ON pgbench_history(mtime); EOFמריצים את הסקריפט
index-init.sql:psql -h $PGHOST -U postgres -d pgbench -f ./index-init.sql Password for user postgres: CREATE INDEXאופציונלי: מאמתים את סכימת מסד הנתונים ואת הטעינה הראשונית:
psql -h $PGHOST -U postgres -d pgbench pgbench=> \dt List of relations Schema | Name | Type | Owner --------+------------------+-------+---------- public | pgbench_accounts | table | postgres public | pgbench_branches | table | postgres public | pgbench_history | table | postgres public | pgbench_tellers | table | postgres (4 rows) pgbench=> \di List of relations Schema | Name | Type | Owner | Table --------+-----------------------+-------+----------+------------------ public | aid | index | postgres | pgbench_history public | bid | index | postgres | pgbench_history public | delta | index | postgres | pgbench_history public | mtime | index | postgres | pgbench_history public | pgbench_accounts_pkey | index | postgres | pgbench_accounts public | pgbench_branches_pkey | index | postgres | pgbench_branches public | pgbench_tellers_pkey | index | postgres | pgbench_tellers public | tid | index | postgres | pgbench_history (8 rows)אחרי הטעינה, גודל מסד הנתונים צפוי להיות בערך 365GB:
pgbench=> \l+ pgbench List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description --------------+------------------+----------+---------+---------+---------------------------------------+--------+------------+-------------------------------------------- ... pgbench | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | 365 GB | pg_default | ...יוצרים את הסקריפט
index-inserts-only.sqlבאמצעות הפקודות הבאות:cat > index-inserts-only.sql << EOF \set aid random(1, 1000000000) \set bid random(1, 1000000000) \set tid random(1, 1000000000) \set delta random(-500000000, 500000000) BEGIN; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; EOFמריצים את בדיקת הביצועים של pgbench באמצעות הפקודה הבאה:
sudo nohup pgbench --host=$PGHOST --user=postgres --time=3900 --client=256 --jobs=256 --scale=25000 --progress=1 --file=./index-inserts-only.sql pgbench > /tmp/pgbench-index-insert-only-run.out 2>&1
ניתוח תוצאות ההערכה
מאמתים את הפלט של הפקודה הקודמת בקובץ /tmp/pgbench-index-insert-only-run.out. בבדיקת ההשוואה הזו אמורים להופיע כ-52,000 טרנזקציות לשנייה ושיעור ניצול של כ-88% מהמעבד, כמו שמוצג בפלט לדוגמה הבא.
scaling factor: 25000
query mode: simple
number of clients: 256
number of threads: 256
duration: 3900 s
number of transactions actually processed: 201785196
latency average = 4.947 ms
latency stddev = 3.488 ms
tps = 51738.604613 (including connections establishing)
tps = 51742.459757 (excluding connections establishing)
הרצת הערכת ביצועים של Select Only במכונה עם 64 מעבדי vCPU
pgbench תומך בתרחיש מובנה של בחירה בלבד, שמריץ שוב ושוב שאילתות SELECT מכמה חיבורי לקוח מול מסד נתונים מסוים. הבדיקה הזו משמשת למדידת ביצועי הקריאה של מסד הנתונים, בלי להוסיף את התקורה של פעולות לשינוי נתונים כמו INSERT, UPDATE או DELETE. שאילתות ה-SELECT האלה הן שאילתות חיפוש נקודתיות, והן הסוג המהיר והיעיל ביותר של שאילתות בחירה כי הן כוללות גישה לשורת נתונים אחת בלבד ישירות ממבני האינדקס.
הרצת בדיקה של "בחירה בלבד" עוזרת לכם:
השגת תפוקה מקסימלית: מכיוון שחיפושים של נקודות באינדקס הם הצורה היעילה ביותר של שאילתות במערכת מסד נתונים, אתם יכולים למדוד את התפוקה המקסימלית האפשרית ש-AlloyDB יכול להשיג.
יכולת התאמה לעומס (scalability): בחרו רק בבדיקות ביצועים שעוזרות לבדוק את יכולת ההתאמה לעומס של AlloyDB, החל מ-2 מעבדי vCPU ועד להגדרת המקסימום של מעבדי vCPU ש-AlloyDB מציע.
הגדרת AlloyDB ומכונת הלקוח
הגדרת AlloyDB ומכונת הלקוח במכונה מסוג 64vCPU.
הרצת הערכת הביצועים "בחירה בלבד"
מתחברים למכונת הלקוח באמצעות פקודת הדוגמה הבאה:
gcloud compute ssh --zone "PRIMARY_ZONE" "CLIENT_MACHINE_NAME" --project "GOOGLE_PROJECT"מגדירים את הסביבה באמצעות הפקודה הבאה:
export PGHOST=<private_ip>יוצרים את מסד הנתונים pgbench באמצעות הדוגמה הבאה:
psql -h $PGHOST -p 5432 -U postgres postgres=> create database pgbench; CREATE DATABASEמאתחלים את מסד הנתונים של pgbench. הפקודה הבאה מאתחלת את מסד הנתונים של pgbench עם כ-220GB של נתונים מציאותיים. אתם משתמשים ב-
--scale=15000לבדיקת הביצועים של Select Only ששמורה במלואה במטמון.מריצים את הפקודה הבאה:
sudo nohup pgbench -i --host=$PGHOST --user=postgres --scale=15000 pgbench > /tmp/pgbench-select-only-init.out 2>&1מוודאים שהפלט של הפקודה הקודמת דומה לזה:
cat /tmp/pgbench-select-only-init.out nohup: ignoring input dropping old tables... creating tables... generating data (client-side)... 100000 of 1500000000 tuples (0%) done (elapsed 0.01 s, remaining 161.60 s) 200000 of 1500000000 tuples (0%) done (elapsed 0.03 s, remaining 224.35 s) 300000 of 1500000000 tuples (0%) done (elapsed 0.09 s, remaining 448.97 s) .. .. .. .. .. .. 1499900000 of 1500000000 tuples (99%) done (elapsed 1251.03 s, remaining 0.08 s) 1500000000 of 1500000000 tuples (100%) done (elapsed 1251.10 s, remaining 0.00 s) vacuuming... creating primary keys... done in 2204.62 s (drop tables 2.29 s, create tables 0.01 s, client-side generate 1271.82 s, vacuum 427.83 s, primary keys 502.66 s).מריצים את pgbench. השלב האחרון של בדיקת הביצועים נמשך יותר משעה.
sudo nohup pgbench --host=$PGHOST --user=postgres --builtin=select-only --time=3900 --jobs=256 --client=256 --scale=15000 --protocol=simple --progress=1 pgbench > /tmp/pgbench-select-only-run.out 2>&1אחרי שהבדיקה מסתיימת, בודקים את הקובץ
/tmp/pgbench-select-only-run.outכדי לראות את התוצאות הסופיות.
ניתוח תוצאות ההערכה
במהלך בדיקת ההשוואה הזו, אתם אמורים לראות כ-467,000 טרנזקציות לשנייה ושיעור ניצול של כ-95% מהמעבד (CPU), כמו שמוצג בפלט לדוגמה הבא.
cat /tmp/pgbench-select-only-run.out
transaction type: <builtin: select only>
scaling factor: 15000
query mode: simple
number of clients: 256
number of threads: 256
duration: 3900 s
number of transactions actually processed: 1823506174
latency average = 0.547 ms
latency stddev = 0.267 ms
tps = 467563.144333 (including connections establishing)
tps = 467583.398400 (excluding connections establishing)
סיכום התוצאות של הערכת הביצועים ב-AlloyDB
בטבלאות הבאות מסוכמות תוצאות הבדיקה של AlloyDB, על סמך הבדיקה שבוצעה במסמך הזה.
סיכום הביצועים של HammerDB TPC-C
| סוג המכונה של AlloyDB | תרחיש של עומס עבודה (workload) ב-TPC-C | NUM_WAREHOUSE | NUM_USERS | הזמנות חדשות לדקה (NOPM) | TPM מצטבר | הומרו ל-TPS |
|---|---|---|---|---|---|---|
| 16vCPU | 30% נשמרו במטמון | 3200 | 256 | 252,970 | 582,385 | 9,706 |
| 16vCPU | 100% נשמר במטמון | 576 | 256 | 428,316 | 974,264 | 16,238 |
| 64vCPU | 30% נשמרו במטמון | 12800 | 1024 | 589,598 | 1,371,160 | 22,853 |
| 64vCPU | 100% נשמר במטמון | 2304 | 1024 | 716,138 | 1,665,438 | 27,757 |
סיכום הביצועים של pgbench
| סוג המכונה של AlloyDB | תרחיש של עומס עבודה ב-pgbench | גורם לקביעת קנה מידה | TPS | אחוז ה-CPU |
|---|---|---|---|---|
| 16vCPU | דמוי TPC-B, במטמון מלא | 4000 | 20,359 | 96% |
| 16vCPU | TPC-B Like, מטמון חלקי | 50000 | 14,060 | 94% |
| 16vCPU | הוספת אינדקסים בלבד | 25000 | 51,742 | 88% |
| 64vCPU | תפוקה מקסימלית (בחירה בלבד) | 15000 | 467,583 | 95% |
הרצת השוואה של OLTP ב-Cloud SQL ל-PostgreSQL
כדי לבצע ניתוח השוואתי, אתם יכולים לבדוק ביצועי OLTP מקבילים ב-PostgreSQL ב-Cloud SQL ל-PostgreSQL במכונה עם 16 מעבדי vCPU. בקטע הזה מוסבר איך להגדיר Cloud SQL ל-PostgreSQL (או כל שרת PostgreSQL שפרוס בתשתית שבחרתם) שדומה להגדרה של AlloyDB שמשמשת במדריך הזה להשוואה של ביצועי OLTP. בתרחיש הזה, כולל בחירת מק"ט של 16vCPU, הפעלת זמינות גבוהה (HA) והגדרה מראש עם אחסון.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the AlloyDB, Compute Engine, and Resource Manager APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - מוודאים שבחשבון המשתמש שלכם יש את התפקידים "אדמין ב-Cloud SQL" ו"צפייה ב-Compute".
הקצאת מכונה של Cloud SQL ל-PostgreSQL
יוצרים מכונה של PostgreSQL, ומחליפים את הערכים הבאים:
- גרסת מסד הנתונים: PostgreSQL 14
- בוחרים הגדרה כדי להתחיל: ייצור
- בוחרים את האזור והזמינות לפי אזור: בוחרים באפשרות
us-central1כאזור. - זמינות אזורית: מספר אזורים (זמינות גבוהה)
- האזור הראשי:
us-central1-c - אזור משני:
us-central-1-f
- האזור הראשי:
- סוג המכונה: מכונה עם זיכרון גבוה, 16 vCPU, 104GB. זו המכונה הכי קרובה ש-Cloud SQL ל-PostgreSQL מציע למכונת AlloyDB התואמת שיצרתם בקטע "השוואה לשוק של AlloyDB" במסמך הזה.
- נפח אחסון: בהתאמה אישית, 1,500GB
- הפעלת הגדלה אוטומטית של נפח האחסון
- הצפנה: Google-owned and Google-managed encryption key
- חיבורים: כתובת IP פרטית
- רשת:
default - כתובת IP ציבורית: מופעלת
- רשת:
לוחצים על Create instance.
אחרי שיוצרים את מכונת PostgreSQL, רושמים את כתובת ה-IP הפרטית. אתם משתמשים בכתובת ה-IP בתור
PGHOSTכדי ליצור חיבורים עם נקודת ההשוואה.
הקצאת מכונת הלקוח
הקצאת מכונה של Cloud SQL ל-PostgreSQL. כדי להריץ את נקודת ההשוואה של OLTP לבחירתכם, אתם צריכים מכונת לקוח עם כוח משמעותי של מעבד (CPU) באותו אזור של המכונה הראשית של Cloud SQL ל-PostgreSQL ב-Cloud SQL.
אופציונלי: במקום השלב הקודם, אתם יכולים להשתמש באותו מחשב לקוח שהגדרתם לבדיקת ביצועים של AlloyDB, בתנאי שמתקיימים התנאים הבאים:
- מכונת הלקוח נמצאת באותו אזור שבו נמצא המכונה הראשית החדשה של PostgreSQL (Cloud SQL ל-PostgreSQL).
- המחשב של הלקוח עומד בדרישות המינימליות של המעבד, ה-RAM וגודל הדיסק.
במדריך הזה להשוואת ביצועים, השתמשתם שוב במכונות הלקוח כשהן היו באותו אזור כמו המכונה הראשית, וכשהן היו גדולות מספיק כדי להביא את השרת לקיבולת המלאה שלו.
אם יצרתם מכונת לקוח חדשה, הגדירו את מכונת מנהל ההתקן של נקודת ההשוואה. אם לא, פועלים לפי ההוראות במדריך הזה בהתאם לבדיקת הביצועים שרוצים להריץ.