Knowledge & Security by CAT-CA InfoSec Team.


[Best view with Firefox web browser]

Archive for ตุลาคม, 2008

มาทำ 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 »

มาทำ Output Caching ใน ASP.NET กันเถอะ

Posted by ejeepss on 9th ตุลาคม 2008

Web Application ที่เราพัฒนากันนั้น จะสังเกตุได้ว่า หน้า Page ต่างๆ ที่ลูกค้าเข้ามาเยี่ยมชมนั้น หากสังเกตุดีๆ บางหน้าไม่มีการเปลี่ยนแปลงใดๆ เลย เป็นหน้าเดิมๆ บางหน้าไปเรียกจากฐานข้อมูลมาโชว์ หรือเรียกจาก Text, XML ไฟล์มาโชว์ แต่ข้อมูลที่มาโชว์นั้น ก็เหมือนเดิม กว่าจะ Update ก็นานๆ ที เอ เราจะมีวิธีไหนได้บ้างที่จะลดการทำงานของ Server ลง ซึ่งหากใครพัฒนาโดยใช้ ASP.NET Pages ผมขอแนะนำเทคนิคเล็กๆ น้อยๆ ครับ ไม่เห็นภาพใช่ไหมครับ มาลองทำกันดูครับ

เปิด Vistual Studio 2008 ครับ เขียน Web App สักตัวครับ

Read more »


Posted in .NET Technology | 99 Comments »

มาทำ Connection Pooling กันเถอะ

Posted by ejeepss on 9th ตุลาคม 2008

ระบบงานที่มีการติดต่อกับฐานข้อมูลตลอดเวลา หรือติดต่อบ้าง ไม่ติดต่อบ้าง หรือมีจำนวน Client เข้ามาติดต่อเป็นจำนวนมาก เปิดฐานข้อมูล แล้วก็ปิด แล้วรู้หรือไม่ครับ ว่ามันทำงานอย่างไร การเรียกใช้ฐานข้อมูลแต่ละครั้ง อย่างน้อยจะต้องมี Overhead ในส่วนของการสถาปนาการเชื่อมต่อ ซึ่งจุดนี้ครับ เป็นหัวใจครับ หากเราลดการสถาปนาการเชื่อมต่อกับฐานข้อมูลได้ การติดต่อระหว่าง Client ต่างๆ ที่จะเข้ามานั้น ก็จะมีประสิทธิภาพมากขึ้น

ก่อนอื่น เรามาดูภาพรวมของเดิมก่อนนะครับ

Read more »


Posted in .NET Technology | 182 Comments »

มาทำ SQL Server Session State กันเถอะ

Posted by ejeepss on 9th ตุลาคม 2008

อะไรคือ SQL Server Sessionstate? ก่อนที่จะตอบคำถามนี้ได้ ขอพูดภาพรวมก่อนนะครับ การทำงานของ Webapplication จะทำงานในแบบ Stateless คือไม่จำ Browser ใดๆ เลย .. เพราะฉะนั้น หาก Application ที่ RUN ต้องการจำได้ว่า Browser ไหน ทำอะไร ในกรณีที่ต้องการเก็บหรือเก็บค่าใดๆ ส่วนใหญ่จะเก็บไว้ใน Session ซึ่งหาก Application นั้นๆ เขียน Session[] เป็นจำนวนมาก ผลลัพท์ก็คือการกิน Memory ของเครื่อง ซึ่งหากบังเอิญ Application เรามีคนเข้าพร้อมๆ กันจำนวนมาก Memory ที่เก็บ session ก็จะถูกใช้ไปเรื่อยๆ ๆ ๆ ๆ (หรือหากถูกโจมตี ในรูปแบบกิน Session ไปเรื่อยๆ ล่ะก็) การทำ SQL Server Sessionstate ก็เป็นอีกหนึ่งทางออก

Read more »


Posted in .NET Technology | 63 Comments »

มา Modify Osticket กันเถอะ

Posted by ejeepss on 9th ตุลาคม 2008

หลังจากที่ผมได้แนะนำวิธีการลง OsTicket ไปแล้ว *คลิ๊กที่นี่

คราวนี้มาดูกันดีกว่า ครับ ว่า OsTicket ที่เป็น OpenSource นั้น มีความสามารถแค่ไหน ฟังก์ชั่นการทำงานเพียงพอกับความต้องการของเราหรือไม่ .. และหากจะนำมาปรับปรุงให้เข้ากับงานของเรานั้น ยุ่งยากมากไป .. มาลุยกันเลย

ก่อนอื่น เราต้องเข้าใจภาพรวมของ OsTicket ก่อน

หมายเหตุ

  • สร้าง WebSite และติดตั้ง OsTicket ไว้ที่ URL: ticket.myweb.com
  • สร้าง Email ไว้สำหรับให้ลูกค้าเปิด Ticket ทาง EMail ที่ ticket@myweb.com

อธิบายภาพรวมแต่ละหัวข้อ

Read more »


Posted in Open Source | 178 Comments »