Home-Assistant Database Optimization

Home-Assistant Database Optimization - techblog.co.i

אחת הבעיות הנפוצות ביותר היום אצל משתמשי ה Home-Assistant היא נפח ה Database של המערכת אשר הולך וגדל. הבעיתיות ב Database בעל נפח גדול באה לידי ביטוי בשני אופנים עיקריים, הראשון איטיות של המערכת והשני קריסות של המערכת. במדריך זה אתמקד בדרכי ההתמודדות עם הנפחים של ה Database תוך שימוש ברכיב ה Recorder המובנה של המערכת וכן בסקריפטים מותאמים אישית אשר כתבתי לצורך כך.

אך לפני שנצלול פנימה אל הפתרונות עלינו להבין תחילה איך נראה ה Database של המערכת ומה הגורמים לכך שהוא יתנפח ויגיע לנפחים גדולים. ה Database של Home-Assistant בנוי מארבע טבלאות, אך אנחנו נתרכז בשניים מהן.

Home-Assistant Database and Tables
  1. Events – בטבלה זו נרשמים כל ארועי המערכת (אתחול, עדכון States של חיישנים, כתיבה ללוג ועוד) ולכן היא גדלה במהירות רבה.
Home-Assistant Events Table

2. States – בטבלה זו נשמרים הערכים של החיישנים והקומפוננטות השונות לצורך ההסטוריה.

Home-Assistant States Table - Techblog.co.il

אז איך בכל זאת ניתן להתמודד עם התופעה?
ניתן לעשות זאת על ידי שימוש נכון ברכיב ה Recorder וכן על ידי שימוש בסקריפטים אשר מבצעים מחיקת רשומות ואופטימיזציה לטבלאות. ועל כך ארחיב בחלק הבא של המדריך.

שימוש ברכיב ה Recorder על מנת למנוע ניפוח של ה Database

למערכת Home-Assistant ישנו רכיב הנקרא Recorder שתפקידו ליעל את העבודה עם ה DB על ידי הכלל או החרגה של היישויות שירשמו לטבלאות ועל ידי אפשרות לעשות purge (ניקוי). החסרון בשיטה זו היא ש purge ימחק את כל ההסטוריה בלי יכולת החרגה של איזה מידע לא למחוק.

באמצעות קטע הקוד הבא, שלקוח מקובץ ה configuration.yamk אדגים כיצד ניתן לשלוט במידע שירשם לטבלאות בצורה פשוטה ונוחה:

עצם הכנסת ה Entities, Domains ו- Events תחת ה Exclude תמנע מראש את כתיבתם לטבלאות ובכך בעצם תמנע ניפוח מיותר של ה Database.
למידע נוסף אודות רכיב ה Recorder ניתן להכנס לדף שלו באתר של Home-Assistant.

שימוש בסקריפטים על מנת לבצע אופטימיזציה מותאמת אישית

תחילה, צרו תיקיה בשם scripts תחת תיקיית הקונפיגורציה של Home-Assistant. בתוך התיקיה צרו 3 קבצים חדשים והכניסו לתוכם את התוכן הבא:

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

הראשון, utils.py יכיל את ההגדרות הכלליות של החיבור ל Database וכן פונקציה אשר תריץ את פקודות ה SQL. אני משתמש בקוד בתצורה זו על מנת שלא לשכפל שורות קוד.

כאשר בשורה הראשונה יש להחליף את הפרמטרים של ההתחברות לשרת ה mysql שלכם.

הקובץ השני, optimize_states_table.py, יכיל את הקוד שמטפל בטבלאת ה states:

כאשר:

  • INTERVAL 0 DAY – מציין את מספר הימים לשמור אחורה.
  • entity_id in – מערך המכיל את היישויות אותן נרצה למחוק.

קובץ שלישי ואחרון, optimize_events_table.py שמטפל בטבלאת ה Events:

כאשר:

  • INTERVAL 0 DAY – מציין את מספר הימים לשמור אחורה.

כעת, נוסיף shell commands אשר יקראו לקבצי הפייתון ויריצו אותם. לצורך כך הוסיפו את השורות הבאות לקובץ ה configuration.yaml שלכם:

אתחלו את המערכת, וכעת תחת Developer Tools אתם אמורים לראות שתי Shell Commands:

כעת נוסיף 2 כפתורים ל UI על מנת שנוכל להריץ את הסקריפטים באופן יזום. לצורך כך הכניסו את הקוד הבא אל תוך קובץ ה ui-lovelace שלכם:

והתוצאה לפניכם:

Home-Assistant database optimization.

בהצלחה!

Be the first to comment

Leave a Reply

כתובת האימייל שלך לא תפורסם


*