הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   שאלה על מסד נתונים (https://hosts.co.il/forums/showthread.php?t=108399)

Rhost 02-02-15 20:07

שאלה על מסד נתונים
 
רציתי לדעת עם כדי לפתוח cache במסד נתונים שאתה מריץ משחק און ליין
או בכלל אסור לפתוח? כי במידה וסרביס נופל או שרת עושה רייסט המידע שיש הוא נאבד או לא?

ומה עדיף להריץ בשביל משחק און ליין Myisam או Innodb ?

MAORBARI 03-02-15 02:01

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

Rhost 03-02-15 20:52

תודה.

xoox 04-02-15 17:28

לגבי innodb !!! מומלץ להשתמש בו במידה והטבלה שלך מבצעת הרבה שאילתות Update או Insert מכיוון שבזמן עדכון טבלה ננעלת רק השורה עליה מתבצע העדכון ולא כל הטבלה.

לגבי שליפת נתונים MYISAM יותר מהיר!!!
ועוד משהו!!! במידה ואתה יוצר אינדקסים על טבלה עם מנוע innodb כך בחשבון שהיא תיהיה יותר גדולה מבחינת גודל האחסון.
במקרה אתמול הפכתי טבלה של 450M למנוע innodb ובגלל האינדקסים הטבלה שקלה 850MB ולגבי מהירות לא היה שינוי לטובה אז החזרתי אותה למנוע MYISAM!

לגבי טבלה ל-cache לדעתי תשתמש עם מנוע מסוג MEMORY...
מדובר במנוע שיוצר טבלאות שנמצאות רק בזכרון ה-RAM של ה-MySQL. ברגע שה-MySQL עובר restart מסיבה מסוימת אז כל המידע שיש בטבלה נמחק (אך המבנה נשמר). כיוון שהטבלה נמצאת ב-RAM, הביצועים שלה מצויינים. מומלץ מאד להשתמש במנוע זה עבור מידע זמני שלא חשוב שהוא יישאר במסד הנתונים במשך זמן רב.

בנוסף אם אתה מעוניין בביצועים טובים אז אתה צריך לקנפג נכון my.cnf לפי הגדרות השרת שלך.

xoox 04-02-15 17:33

בטעות הודעה כפולה!

MAORBARI 04-02-15 18:42

ציטוט:

נכתב במקור על ידי xoox (פרסם 894192)
לגבי innodb !!! מומלץ להשתמש בו במידה והטבלה שלך מבצעת הרבה שאילתות Update או Insert מכיוון שבזמן עדכון טבלה ננעלת רק השורה עליה מתבצע העדכון ולא כל הטבלה.

לגבי שליפת נתונים MYISAM יותר מהיר!!!
ועוד משהו!!! במידה ואתה יוצר אינדקסים על טבלה עם מנוע innodb כך בחשבון שהיא תיהיה יותר גדולה מבחינת גודל האחסון.
במקרה אתמול הפכתי טבלה של 450M למנוע innodb ובגלל האינדקסים הטבלה שקלה 850MB ולגבי מהירות לא היה שינוי לטובה אז החזרתי אותה למנוע MYISAM!

לגבי טבלה ל-cache לדעתי תשתמש עם מנוע מסוג MEMORY...
מדובר במנוע שיוצר טבלאות שנמצאות רק בזכרון ה-RAM של ה-MySQL. ברגע שה-MySQL עובר restart מסיבה מסוימת אז כל המידע שיש בטבלה נמחק (אך המבנה נשמר). כיוון שהטבלה נמצאת ב-RAM, הביצועים שלה מצויינים. מומלץ מאד להשתמש במנוע זה עבור מידע זמני שלא חשוב שהוא יישאר במסד הנתונים במשך זמן רב.

בנוסף אם אתה מעוניין בביצועים טובים אז אתה צריך לקנפג נכון my.cnf לפי הגדרות השרת שלך.

INNODB בשליפה איטי בצורה לא מורגשת בכלל בשליפה מ MYISAM, לכן כולם משתמשים היום ב INNODB.
בקשר ל MEMORY, לא ממליץ להשתמש במשחקי דפדפן. זה יאכל לך את הזכרון של השרת וגם נפילה מזערית של השרת תאבד לך נתונים, והמשחק יהיה כשלון.

xoox 05-02-15 01:23

ציטוט:

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

כשהצעתי להשתמש בטבלה עם מנוע MEMORY זה בגלל השאלה שהוא שאל אם בכלל מותר או אסור...
לגבי cache במידה והוא משתמש עם תוספים כאלו ובטח לא לגבי טבלאות של המשחק עצמו כי מן הסתם זה נמחק בכל פעם שמפעילים את הסרוויס של MYSQLD.
אבל יעבוד הרבה הרבה יותר מהר זה בטוח!
ובכל מקרה לא נראה לי שהוא מתכנן לעשות ריסט לשרת כל שנייה וחצי כי זה לא הייעוד של שרת.
כשהכל מקונפג ועובד טוב אז אין צורך בריסט גם לשנה+

MAORBARI 05-02-15 07:31

ציטוט:

נכתב במקור על ידי xoox (פרסם 894201)
כשהצעתי להשתמש בטבלה עם מנוע MEMORY זה בגלל השאלה שהוא שאל אם בכלל מותר או אסור...
לגבי cache במידה והוא משתמש עם תוספים כאלו ובטח לא לגבי טבלאות של המשחק עצמו כי מן הסתם זה נמחק בכל פעם שמפעילים את הסרוויס של MYSQLD.
אבל יעבוד הרבה הרבה יותר מהר זה בטוח!
ובכל מקרה לא נראה לי שהוא מתכנן לעשות ריסט לשרת כל שנייה וחצי כי זה לא הייעוד של שרת.
כשהכל מקונפג ועובד טוב אז אין צורך בריסט גם לשנה+

לפעמים יש תקלות, זה קורה בכל משחק...

Rhost 05-02-15 08:28

תודה על העזרה, העברתי את המסד מ MyISAM ל InnoDB ולא הרגשתי שום שינוי זה נשאר אותו דבר עכשיו ששאלתי עם מומלץ להשתמש ב cahce במכיוון שעשיתי רייסט לסרביס mariadb ונעלמו לי דברים במשחק שזה די הרס אותו (נעלמו דברים קריטים), הייתי רוצה לקבל ממכם חוות דעת על הקונפיג שעשיתי
השרת שאני משתמש הוא xeon 1245 v3 , 32GB , raid5 ssd 120GB
אני משתמש ב nginx, mariadb
והקונפיג הולך אצלי ככה

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

skip-federated
skip-archive
skip-blackhole
wait_timeout = 30
max_heap_table_size = 256M
default-storage-engine = InnoDB
slow_query_log=0
long_query_time = 2
slow_query_log_file=/var/lib/mysql/slowq.log
log-error=/var/log/mysqld.log

# innodb settings

innodb_doublewrite = 1
innodb_file_per_table = 1
innodb_data_file_path= ibdata1:10M:autoextend
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 0
innodb_lock_wait_timeout=50
innodb_support_xa=1

# DISKS
innodb_io_capacity = 500
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mariadb-5.5]

innodb_log_block_size = 512

log_slow_filter =admin,filesort,filesort_on_disk,full_join,full_sc an,query_cach$

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

xoox 05-02-15 09:10

ציטוט:

נכתב במקור על ידי Rhost (פרסם 894204)
תודה על העזרה, העברתי את המסד מ MyISAM ל InnoDB ולא הרגשתי שום שינוי זה נשאר אותו דבר עכשיו ששאלתי עם מומלץ להשתמש ב cahce במכיוון שעשיתי רייסט לסרביס mariadb ונעלמו לי דברים במשחק שזה די הרס אותו (נעלמו דברים קריטים), הייתי רוצה לקבל ממכם חוות דעת על הקונפיג שעשיתי
השרת שאני משתמש הוא xeon 1245 v3 , 32GB , raid5 ssd 120GB
אני משתמש ב nginx, mariadb
והקונפיג הולך אצלי ככה

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

skip-federated
skip-archive
skip-blackhole
wait_timeout = 30
max_heap_table_size = 256M
default-storage-engine = InnoDB
slow_query_log=0
long_query_time = 2
slow_query_log_file=/var/lib/mysql/slowq.log
log-error=/var/log/mysqld.log

# innodb settings

innodb_doublewrite = 1
innodb_file_per_table = 1
innodb_data_file_path= ibdata1:10M:autoextend
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 0
innodb_lock_wait_timeout=50
innodb_support_xa=1

# DISKS
innodb_io_capacity = 500
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mariadb-5.5]

innodb_log_block_size = 512

log_slow_filter =admin,filesort,filesort_on_disk,full_join,full_sc an,query_cach$

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

תעשה תיקון ואופטימזציה לכל הדאטה בייס.
תריץ MySQLTuner (יעזור לך מאוד בכדי לדעת מה אתה צריך להגדיר בקינפוג של MYSQL לפי גודל בסיסי הנתונים ולפי איך שזה רץ)
* אם אתה לא מכיר את הערכים של הגדרות mysql לא מומלץ לשנות לפני שתקרא את המשמעות של כל ערך שאתה משנה.

Rhost 05-02-15 09:53

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

xoox 05-02-15 11:44

אוקיי אז לפי הטענה שלך למה אתה כל כך בטוח הבעיה מלכתחילה ב-MYSQL?

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

Rhost 05-02-15 20:30

כמובן שזה נבדק יש יותר מ 90% מהזכרון פנוי.
ולמה אני חושב שהבעיה במסד זה כי שהכל עובד לאט ואני עושה רייסט ל mariadb אז הכל משתחרר ונהיה מהיר פתאום.
וגודל המסד בערך 50-60 מגה

xoox 05-02-15 21:51

הינה משהו שכנראה יעזור לך למצוא פיתרון
http://www.askapache.com/mysql/perfo...ing-mysql.html
https://mariadb.com/kb/en/mariadb/op...on-and-tuning/

ודרך אגב... יצרת אינדקסים לטבלאות?

אבי בר 06-02-15 15:48

יכול להיות אינסוף דברים חייב לבדוק רק מי שמכיר את הקוד יוכל להגיד לך מה קורה
1) יכול להיות לולאה כלשהי שעושה אינסוף קריאות למסד נתונים ותוקעת אותו
2) יכול להיות הגדרות apache שמוגדר שם עד 10 משתמשים(זה הברירת מחדל נראה לי)
3)יכול להיות שוב איזהשהי פעולה בזבזנית בקוד.
4)יכול להיות שאין אינדקסים בשרת
5)הגדרות לא נכונות
6)יצא לי להתקל בפירצת sql injection שפשוט כל פעם הזריקו קוד שמעמיס על המסד
וכו' וכו' וכו'.

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


כל הזמנים הם GMT +2. הזמן כעת הוא 21:15.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ