ผู้เขียน หัวข้อ: มีปัญหา ms access ช้ามาก  (อ่าน 1536 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 2591
  • คนดีไม่เบ่ง คนเก่งไม่โม้ คนใหญ่โตไม่อวด
    • ดูรายละเอียด
    • อีเมล์
*** ปัญหา ms access ช้ามาก ***
ก่อนที่จะไปทำอย่างอื่นลองมาตรวจสอบ ปัจจัยเหล่านี้ดูนะครับ

- ขนาดของ Database ควรทำการ compact ตามความเหมาะสม
- ระบบ Network มีปัญหา ไวรัส spy ware หรือไม่ Update ลองแสกนแบบ full scan ทั้ง 2 อย่าง
- การต่อแลนแบบ ไร้สาย(Wireless LAN) ระวังเรื่องความ Stable ความแรงของสัญญาณ ถ้าดับบ่อย ระวัง database corrupt

- Lan Card ความเร็วเท่าไร 10/100/1000 วิ่งเต็มมั๊ย ที่ Switch/Hub ไฟส้มมั๊ย

คิดออกเท่านี้ก่อน...
Ms. Access แต่ละรุ่น Database Specifications and Limitations ไม่เท่ากัน


การทำ Upsizing ตามที่ผมได้ลองผิดลองถูกมา แต่ไม่ได้นำไปใช้จริงหรอกครับ แค่ลองเล่นๆ ทำให้ผมพอจะเข้าใจและสรุปคร่าวๆ ได้ว่า

- เป็นการย้ายฐานข้อมูลจาก ms Access ไปสู่ ms sql (ไม่ใช่ mysql)
- คุณต้องติดตั้งโปรแกรม ms sql ในเครื่องนั้นๆ ก่อน หรือคุณต้องมี ms sql อยู่ใน server หรือวงเน็ตเวอร์คของคุณก่อน
- เวอร์ชั่นของ ms sql จะต้องสัมพันธ์กัน และรองรับกัน กับเวอร์ชั่น ms access ที่คุณใช้
- คุณจะต้องได้สิทธิ์หรือมีสิทธิ์ใน ms sql นั้น (มี username password และมีสิทธิ์เพียงพอที่จะสร้าง database ตัวใหม่)
- mdb หรือ mde ที่คุณเคยใช้ จะถูกยกเลิกระบบจะให้คุณเปลี่ยนไปใช้ ADP แทน (สามารถคอมไพลให้เป็นเหมือน mde ได้อีกในภายหลัง)
- adp ลำดับแรกนั้น วิซาร์ดตัวช่วย upsizing จะสร้างให้คุณก่อน 1 ตัว คุณสามารถสร้างเพิ่มในภายหลังได้ object บางอย่างใน mdb ตัว front-end ที่คุณเคยใช้ ยังสามารถ import เข้ามาใช้ตามปกติ ใน adp ได้ เช่น ฟอร์ม, โมดูล, รายงาน
- ประสิทธิภาพ ความเสถียรความรวดเร็วของการเชื่อมต่อ ยังต้องขึ้นอยู่กับการจัดการระบบทั้ง ระบบฐานข้อมูล และระบบการเชื่อมต่อในเน็ตเวอร์คของคุณเช่นเดิม

ถ้าคุณยังไม่คล่องจริง เรื่อง ms msql หรือการใช้ adp (ซึ่งจะต่างไปจาก mdb พอสมควร) ขอแนะนำว่า อย่าได้ใช้ทดลองกับข้อมูลจริง
- ศึกษาการใช้ ms sql กับ adp ให้คล่องก่อน หรือ......
- ศึกษาการทำ Performance ของ mdb และของ network เพื่อจะใช้ mdb ต่อไป

แนวคิดในการปรับปรุงเรื่องความเร็วเบื้องต้น ตามสไตล์ผม
(client เครื่องอื่นๆ จะได้ไม่มีปัญหาเรื่องความเร็วในการเข้าถึงข้อมูลชุดเดียวกัน)
- ลดการลิงค์ตาราง เปลียนไปใช้วิธีการรัน sql แบบงานต่องาน หรือการ select ชุดข้อมูลมาพักในตารางพักแล้วทำงานจนเสร็จค่อยสั่งอัพเดตกลับ
- การโหลดข้อมู?เข้ามาบนฟอร์ม ให้ลดการล็อคข้อมูล ถ้าไม่จำเป็นจริงๆ ก็ไม่ต้องล็อค
- ในระบบเน็ตเวอร์คให้พยายามบริหารแบนด์วิธให้ดี ในสายแลนเดียวกัน อาจมีการใช้งานหลายอย่าง เช่นอินเตอร์เน็ต การสั่งปริ๊นท์ การโอนถ่ายไฟล์อื่นๆ และรวมไปถึงการทำงานด้วยข้อมูลของโปรแกรมคุณเอง ตรงนี้ต้องช่วยกันประหยัด อย่าลืมว่ามันสายเส้นเดียวกันทั้งหมด
- ประสบการณ์ผมยังน้อยอยู่เกี่ยวกับ Performance คงให้คำแนะนำ-ให้แนวทางได้แค่นี้แหละครับ



ขอบคุณสำหรับทุกคำตอบครับ

เริ่มแรกผมหัดทำ access ด้วยตัวเองโดยการลองผิดลองถูก ค่อยๆทำที่ละตารางๆ จึงไม่รู้ว่าการออกแบบระบบทีู่ถูกต้องเป็นอย่างไร เอาแค่ใช้งานได้เท่านั้น(ซึ่งตอนนี้ก็ัยังไม่รู้T_T) ตอนนี้โปรแกรมผมมี Query 48 ,form 37,report 3 Size 6mb. ส่วนข้อมูล table 17table, size 70 mb. โปรแกรมผมมีการทำcombo box เยอะจึงมีการlinkแต่ละตารางเข้าด้วยกัน(ถ้าดูในหน้าความสัมพันธ์ปลายด้านนึงเป็นเลข1อีกด้านเเป็นinfinity...ไม่รู้ว่าหมายความว่าอะไร) คำถามนะครับ
1.การลดการลิงค์ตารางทำยังไง แล้วจะมีผลต่อโปรแกรมไหม
2.การรัน sql แบบงานต่องาน คืออะไรครับ
3.การ select ชุดข้อมูลมาพักในตารางพักแล้วทำงานจนเสร็จค่อยสั่งอัพเดตกลับ ทำยังไงครับ
4.ผมใช้access 2003 ต้องใช้กับ mysql เวอร์ชั่นไหน

ความจริงแล้วถ้าแก้ไขแค่ในaccess ได้ก็จะดีมากเพราะมีไม่ความรู้mysql เลยครับ
รบกวนแนะนำด้วยครับ ขอบคุณครับ

แนะนำทำตามคำแนะนำของคุณGerald

ที่สำคัญแนะนำให้ compact หรือกระชับข้อมูลทุกครั้งเมื่อเลิกใช้ Access ครับ ผมเคยเจอปัญหานี้เหมือนกัน ตอนแรกคิดว่าขนาดไฟล์ใหญ่เกินไป

ไฟล์ของผมขนาดที่กระชับแล้ว 30MB จำนวน table และอื่นๆนับไม่ไหว ยังใช้งานเป็นกลุ่มด้วยกัน 6 เครื่องพร้อมกันสบายๆครับ( สเปคเครื่องก็เป็นแค่ pentium ธรรมดาด้วยครับ)

อ้อผมใช้ Access 2003 นะครับ เคยใช้ 2007 แล้วมีปัญหาช้าครับ


ผมใช้ Access 97 แนะนำใ้ห้เอาตัวโปรแกรมลงที่ Local Drive ครับ
ส่วน Database ที่ Attached อยู่บน Server ครับ
งานของผมมีไฟล์โปรแกรมขนาด 15 MB ทำเป็น FrontEnd ลงทุกเครื่อง
ไฟล์ Database ขนาด 450 - 800 MB ประมาณ 15 ไฟล์ (ฺBackEnd)
ใช้งานได้เร็ว ไม่มีปัญหาอะไร ข้อมูลมีประมาณ 2500000 Transection ต่อวัน ครับ

ปัจจุบันตัวโปรแกรมลงอยู่ที่เครื่อง Client เป็น Access 2000 ส่วนเครื่องที่ใช้ MS Office เวอร์ชั่นสูงกว่านั้น จะใช้ Access Runtime 2000 ใช้ Database SQL Server ปัจจุบันมีขนาดใหญ่มาก ประมาณ 7-8 GB ดูข้อมูลย้อนหลังถึงปี 2011 ส่วนจำนวน Transection Stock อยู่ที่ประมาณ 12,000 ต่อวัน จำนวน user ที่ใช้งานประมาณ 50 เครื่อง ตอนนี้เวลาเปิดฟอร์มหรือรายงาน เพื่อเรียกข้อมูล ระบบจะโหลดนานมาก ไม่รู้จะเริ่มต้นแก้ปัญหายังไง ใครมีแนวคิดบ้างค่ะ


ระบบ Network น่าจะมีปัญหา    เคยเชื่อมต่อ My slq กับ aceess แล้ว My sql ช้ามาก

ของผมตัว sever กับ Client อยู่ไกลกันมากเกินครับ
เป็นเหมือนกันครับ เคยลองแก้โดย
วิธีที่ 1
แยกฐานข้อมูล SQL เป็น 2 ส่วนคือฐานข้อมูลเก่า และฐานข้อมูลใหม่ แล้วจัดทำตัว Access ให้รองรับทั้งฐานข้อมูลเก่าและฐานข้อมูลใหม่ อันนี้ผมตั้งสมมุติฐานโดยข้อมูลเก่าใช้แค่สืบค้น รอนานได้ แต่ฐานข้อมูลใหม่ (ในห้วง 1 ปี) อาจใช้งานมากหน่อย ให้มีข้อมูลน้อย และใช้งานได้เร็ว จะทำให้เกิดความสะดวก ตอนนั้นผมยังไม่มีงบประมาณจัดหาเครื่องคอม ก็ใช้วิธีนี้
วิธีที่ 2
ซื้อ Server ใหม่ให้เป็นรุ่นปีปัจจุบัน
ซื้อเครื่อง Client ใหม่ให้เป็นรุ่นปีปัจจุบัน
(อันนี้เร็วขี้นเห็น ๆ เลยครับ)
วิธีที่ 3 (กำลังจะลองทำดูครับ)
ออกแบบระบบงานบน access ใหม่ โดยเขียนเป็น Code SQL ส่งไปยัง SQL Server ให้ส่งข้อมูลมาเท่าที่ต้องการ (ซึ่ง SQL Server ส่งข้อมูลมาน้อย จะแสดงผลได้เร็วกว่า) จากเดิมผมใช้วิธี link table จาก SQL Server แล้วมาเขียน Query ใน Access เพื่อแสดงผลข้อมูลที่ต้องการ (อันนี้ SQL Server จะส่งข้อมูลมาให้เครื่อง Client ทั้งตาราง ซึ่งมีเป็นจำนวนมาก ยิ่งมีหลายตาราง จะยิ่งมีข้อมูลมาก ซึ่งจะทำให้แสดงผลได้ช้ากว่า) ที่คิดเช่นนี้เนื่องจากผมเคยลองทำใน VB แล้วได้ผลดี

แลกเปลี่ยนเรียนรู้ครับ

    ผมก็เคยใช้ MS-Access-2003 ซึ่งเมีอยู่ำระบบหนึ่ง ผม Link Database 3 ก้อน คือทั้ง MySQL, MS-SQL และ Oracle ในส่วนของ MySQL กับ MS-SQL ไม่มีปัญหาอะไร เพราะ Link ผ่าน ODBC ได้อยู่แล้ว มีปัญหานิดหน่อยตรง Oracle ที่ใช้ ODBC อย่างเดียวไม่พอ ต้องลงโปรแกรม Oracle ที่ Client ด้วย
     ข้อมูลที่ผมใช้อยู่ ก็วิ่งอยู่ในระดับล้าน record ก็ไม่เห็นว่าจะช้าตรงไหน ที่เคยเห็นว่าช้าก็มีสาเหตุมาจาก
1. Network บางช่วงที่มีปัญหาเรื่อง Traffic มากๆ
2. Query ที่ Join Table กันมากเกินไป หรือ Join Table กันไม่ถูกวิธี
3. เก็บไฟล์ที่เป็น OLE Object ใน Table แทนที่จะเก็บเป็น Path Link