top of page

Application Read-Only Access on an Availability Replica

DBA בכיר בחברת ביטוח מטעם נאיה טכנולוגיות.

אחד היתרונות החזקים ביותר בAlwaysOn- הוא האפשרות להגדיר Readable Secondary.

Readable Secondary מאפשר לנו לפנות לבסיס הנתונים שלנו ברפליקה הנוספת למטרות קריאה.

מה שיכול להוביל להורדה משמעותית בעומס ע"י הפניה של דוחות למשל לעותק שפתוח לקריאה, צמצום האפשרות של נעילות וכו'.

ניקח לדוגמא שני שרתים שמוגדרים בתצורת AlwaysON:

HHW-RGIN

HHW-HZIN

הקמנו Availability Group אחד בשם AG-IN ו-Listener בשם HHW-LSIN.

סימנו במאפיינים של ה- Availability Group ב-Yes את האופציה של Readable Secondary

לצורך העניין, ה-AG מוגדר כ-Secondary בשרת HHW-RGIN

שלב ראשון - ApplicationIntent=ReadOnly:

על פניו, כל ההגדרות נראות תקינות.

כדי לפנות לצד הקריא, הלא הוא ה-Readable Secondary שלנו, יש לגשת ל-Listener ובנוסף יש להוסיף ל- Connection String שלנו את המאפיין ApplicationIntent=ReadOnly

נבצע התחברות דרך ה- Management Studio ל-Listener שלנו

נלחץ על Options ונוסיף את המאפיין של ApplicationIntent=ReadOnly

כעת מה שהיינו מצפים הוא כשנבצע שליפה היא תתבצע אל מול ה-Secondary (במקרה שלנו שרת HHW-RGIN)

נרים פרופיילר על שני השרתים ונראה מה קורה:

ניתן לראות שהשאילתה מתבצעת מול שרת HHW-HZIN, שהוא אמור לתפקד כ-Primary Replica במערך ה-AlwaysOn שלנו.

שלב שני - Read-Only Routing URL:

מסתבר אם כך, שלא מספיק לאפשר Readable Secondary ולפנות בעזרת Connection String מתאים עם האופציה של ApplicationIntent=ReadOnly

דבר נוסף שצריך להגדיר עבור ה-Availability Group הוא Read-Only Routing.

מדובר ביכולת של SQL Server לנתב Connections של קריאה בלבד לרפליקה של ה-ReadOnly.

כיום, לא ניתן לבצע זאת בעזרת ה-GUI.

-- Read only routing URL

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-RGIN' WITH

(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://HHW-RGIN.domain.com:1433'));

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-HZIN' WITH

(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://HHW-HZIN.domain.com:1433'));

-- Read only routing List

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-RGIN' WITH

(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('HHW-HZIN','HHW-RGIN')));

ALTER AVAILABILITY GROUP [AG-IN]

MODIFY REPLICA ON

N'HHW-HZIN' WITH

(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('HHW-RGIN','HHW-HZIN')));

GO

בעצם הגדרנו 2 דברים:

Read only routing URL - השמה של Routing URL עבור כל רפליקה שמוגדרת כ-Readable Secondary. במקרה שלנו 2 הרפליקות מוגדרת כ-Readable Secondary.

Read only routing List – מכילה עבור כל רפליקה את כל הרפליקות שמוגדרות כ-Readable Secondary, כאשר עבור כל רפליקה, היא עצמה תופיע בסוף הרשימה.

כעת נתחבר שוב וננסה לבצע את השליפה

וכעת ניתן לראות שאכן השליפה מתבצעת משרת ה-Secondary שלנו HHW-RGIN.

Featured Posts
Check back soon
Once posts are published, you’ll see them here.
Recent Posts
Archive
Search By Tags
No tags yet.
Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page