Lookup_editor

หลักการทำงานของ component lookup  ที่อยู่ภายใต้ data flow จะมีการจัดการ cache อยู่ 3 โหมด คือ Full cache, Partial cache, No cache ซึ่งหากเราไม่กำหนดมันจะ default ให้เราเป็น Full cache ดังนั้นหากเรานำ SSIS ไปรันบนเครื่องที่มี Ram น้อยและต้องมีการ lookup ข้อมูลเยอะจะพบว่าเจอปัญหา memory load จน out-of-memory ไปครับ

Error: A buffer failed while allocating 10482128 bytes.
Error: The system reports 80 percent memory load. There are 3205296128 bytes of physical memory with 610189312 bytes free. There are 2147352576 bytes of virtual memory with 432152576 bytes free. The paging file has 5180530688 bytes with 2644803584 bytes free.
[SSIS.Pipeline] Error: The Data Flow task failed to create a buffer to call PrimeOutput for output “OLE DB Source 1” (236) on component “OLE DB Source Output” (247). This error usually occurs due to an out-of-memory condition

วิธีที่การแก้ปัญหานี้ ให้เราเลือกรูปแบบการตั้งค่า Cache ตามความเหมาะที่ใช้ในการรัน ดังนี้
1. Full Cache วิธีการนี้จะใช้ Memory ที่เครื่องที่รัน SSIS มากที่สุดโดยเมื่อมีการ Execute Data Flow เจ้าตัว Component Lookup ก็จะทำการไปโหลดเอาข้อมูลทั้งหมดใน Table ฝั่ง Database มาเก็บไว้ใน memory เพื่อใช้ในการ lookup ข้อมูล ดังรูป

FullCache

ใช้วิธีการนี้เมื่อใด
– เมื่อต้องการลดโหลดในการเข้าถึง Database Server บ่อยๆ
– เมื่อข้อมูลในตารางที่จะใช้ทำการ Lookup มีข้อมูลขนาดไม่มาก (เพราะใช้ memory ในการเก็บขณะรัน)
– เมื่อมีการ Lookup ข้อมูลชุดดังกล่าวบ่อยๆ เราก็ควรจะดึงมาเก็บไว้ใน memory จะทำให้ทำงานได้เร็วขึ้น

2. Partial Cache วิธีการนี้เมื่อมีการทำการ Lookup  ข้อมูลเจ้าตัว component lookup ก็จะไปทำการดึงข้อมูลจาก Database Server มาเก็บไว้ใน memory หากมีข้อมูลเดิมเข้ามาอีกก็จะทำการ lookup ใน memory แทน แต่ถ้าหากไม่มีก็จะวิ่งไปดึงจาก Database server และทำการเก็บไว้ใน memory ไว้ใช้ต่อไป ดังรูป

PartialCache

 

ใช้วิธีการนี้เมื่อใด
– เมื่อต้องทำการ Lookup ข้อมูลที่ไม่มาก ซึ่งไม่คุ้มที่จะโหลดทั้งหมดในตารางมาทำการเก็บไว้ใน memory
– เมื่อมี Table ที่จะใช้อ้างอิงขนาดใหญ่

3. No Cache  วิธีการทำงานของ Cache ในโหมดนี้จะไม่มีการดึงข้อมูลมาเก็บใน memory ทุกครั้งที่มีการ Lookup ข้อมูลก็จะทำการไป Query ที่ตารางใน Database Server ทุกครั้ง ดังรูป
NoCache

ใช้วิธีการนี้เมื่อใด
– เมื่อทำการประมวลข้อมูลจำนวนไม่เยอะ
– เมื่อทำการ Look up ด้วย Key ของข้อมูลที่ไม่ซ้ำ
– เมื่อตารางการอ้างอิง มีการเปลี่ยนแปลงของข้อมูลบ่อย (เพิ่ม,ลบ,แก้ไข) หรือเปลี่ยนแปลงได้ขณะที่กำลังรัน SSIS
– เมื่อเครื่องที่เราจะทำการรัน SSIS มีหน่วยความจำที่จำกัด

TG Facebook Comments