มาทำ SQL Server Caching ใน ASP.NET กันเถอะ
Posted by ejeepss on 9th ตุลาคม 2008
จากเรื่องที่แล้วที่ผมได้แนะนำถึง การทำ Output Cacheing ใน ASP.NET นั้น ซึ่งผมได้แนะนำว่า การ Cache แบบง่าย ๆ ในรูปแบบของ Page ที่เป็น Static และได้แนะนำถึง Page ที่ไปเรียกข้อมูลจาก Text หรือ XML คราวนี้เรามาดูว่า หาก Web Page ของเราไปถึงข้อมูลมาแสดงจาก SQL Server จะทำ Cacheing อย่างไร ครับ …
สภาพแวดล้อมที่ผมทดสอบครับ ใช้ VS2008 เขียน WebPage1 หน้า แสดงข้อมูลในฐานข้อมูล SQL Server และทำการทดสอบเพื่มการทำ Cache, SQLDepedency เข้าไป และเพิ่มข้อมูล เพื่อดูความแตกต่างครับ .. เล่ามาตั้งนาน เริ่มเลยดีกว่า
เริ่มต้นด้วยเขียน WebPage ขึ้นมาหนึ่งหน้าครับ เปิด Visual Studio ขึ้นมาเลย ลาก Control ใส่ เขียน code ดังนี้ครับ
ลาก Label 1 ตัวมาวาง และลาก GridView 1 ตัวมาวางครับ แล้ว Double คลิ๊กเพื่อเข้าไปเขียน Code ครับ
เขียนง่าย ๆ นะครับ ใน Page_Load เพิ่มการแสดงวัน เวลา ปัจจุบัน ครับ หลังจากนั้น เขียน Method ShowData() สั้น ๆ ครับ ไปถึงข้อมูลจากฐานข้อมูลจาก Table Account ในฐานข้อมูล Contoso (*ฐานข้อมูลตัวอย่างของ microsoft เขานะครับ) มาแสดงทั้งหมดเลยครับ หลังจากนั้นทดสอบเลยครับ
กด Refresh สักครั้ง
จะเห็นว่า เวลามีการเปลี่ยนนะครับ เป็นเพรา WebPage ทำงานอีกครั้ง ซึ่งเมื่อทำงานก็จะไปดึงข้อมูลมาจากฐานข้อมูล ซึ่งในการใช้งานจริงๆ หากระบบงานเราไม่เป็นระบบ Real Time เช่น พวก ตารางหุ้น อะไรแบบนี้ เราก็ไม่จำเป็นที่จะต้องเรียกฐานข้อมูลตลอดนะครับ … หากเป็น Web ปกติ ต้องถามเลยว่าเปลี่ยนแปลงข้อมูลบ่อยไหม หากไม่บ่อย ลองวิธีนี้ดูนะครับ
เข้าไปที่ c:\windows\Microsoft.NET\Framework\version ที่ท่านใช้ครับ \ และใช้คำสั่ง aspnet_regsql ใช้คำสั่ง ดังนี้ครับ
aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
หลังจากนั้น กลับไปแก้ web.config เพื่อกำหนดการเรียกใช้งาน Cache โดยใช้ Class sqlCacheDependency ให้ไปเพิ่มใน TAG <System.web>
กลับมาที่ หน้า Web Page ครับ ให้เข้าไปเพิ่มการเรียกใช้งาน Cache ใน Default.aspx ครับ เข้าไปใน Source นะครับ
เพิ่มการเรียกใช้ ต้องกำหนดให้ตรงกับใน Web.config นะครับ
Build Project สักรอบ เพื่อความชัวร์ครับ .. คราวนี้มาดูผลลัพท์ กันครับ ..
เหมือนเดิมครับ .. Refresh อย่างไรก้ได้เหมือนเดิมครับ … แต่ให้สังเกตุ เวลา ให้ดีครับ เวลาจะไม่เปลี่ยนแปลง เนื่องจากว่า Server ไม่ได้ไปดึงข้อมูลจาก SQL Server ครับ แต่ดึงข้อมูลจาก Cache กลับไปให้ Browser ครับ … ไม่เชื่อใช่ไหมครับ ต้องลองดูครับ ..
เอ แล้ว Cache จะตายเมื่อไหร่ครับ… Cache จะตายต่อเมื่อ ใน SQL Server มีการเปลี่ยนแปลงครับ … ในส่วนที่เราได้กำหนด Table และ Database ไว้ใน Web.config ครับ .. ระหว่างนี้ ยัง Refresh อยู่หรือเปล่า หยุดก่อนครับ .. มาแก้ไขฐานข้อมูลกันเพื่อทดสอบต่อครับ
เปิด SQL Server Management Studio มาเลยครับ ทดสอบโดยการเพิ่ม Record เข้าไปสัก 1 Record ครับ .. คราวนี้มา Refresh ต่อ เพื่อดูผลลัพท์กัน
แสดงรายการที่เราได้เพิ่มไว้ใน SQL Server ครับ .. และดู เวลาให้ดีครับ มีการเปลี่ยนแปลง .. เนื่องจาก Web Page ไปดึงข้อมูลมาจากฐานข้อมูลใหม่ หลังจากนั้น ลอง Refresh ดูครับ และดูเวลา จะสังเกตุว่า เวลาไม่เปลี่ยนอีกแล้ว พอจะเห็นแนวทางกันแล้วใช่ไหมครับ
สรุป การทำ SQL Server Caching ใน ASP.NET ก็เพื่อลดภาระการทำงานของเว็บไซต์ และฐานข้อมูล โดย Client ที่เรียกเข้ามาจะดึงข้อมูลจาก Cache ไปใช้งาน และ Cache จะตาย และสร้างใหม่ต่อเมื่อฐานข้อมูลมีการเปลี่ยนแปลง ….
คำถามครับ Web Page ของท่านในแต่ละ Web มีการเรียกใช้ฐานข้อมูลบ่อยแค่ไหนครับ .. จำเป็นหรือไม่ที่ Client เข้ามาต้องไปดึงข้อมูลทันที หากไม่บ่อย ผมขอแนะนำให้ทำ SQL Server Caching ครับ หวังว่า Technique นี้อาจพอช่วยท่านได้บ้างครับ
ขอบพระคุณที่สนใจอ่าน
Reference :
Microsoft : Walkthrough: Using ASP.NET Output Caching with SQL Server ให้เปิด Visual Studio ขึ้นมาครับ กด F1 ป้อน ในช่อง URL ครับ
- ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dv_vwdcon/html/96a4d510-55ce-4884-a5d4-a3c2081078d9.htm
Posted in .NET Technology | 231 Comments »













