- สถานะ
- แก้ไขแล้ว
- แก้ไขใน
- 2.3.8
ภาพรวมของปัญหา
ตั้งแต่เวอร์ชัน 2.3.0 ของปลั๊กอิน WPML Media Translation เป็นต้นไป คุณสามารถแปลและซิงโครไนซ์สื่อระหว่างการแปลได้
ในส่วนหนึ่งของกระบวนการตั้งค่า (ซึ่งจะทำงานเมื่อคุณย้ายข้อมูลจากเวอร์ชันก่อนหน้าด้วยเช่นกัน) WPML Media จะสแกนทั้งไซต์เพื่อหา URL ของสื่อที่ใช้ในเนื้อหา
การติดธงโพสต์ที่มีสื่อจะช่วยในภายหลัง ดังนั้นในเหตุการณ์บางอย่างที่เกี่ยวข้องกับการแปลสื่อ (เช่น การแปลโพสต์สื่อบางโพสต์) จะมีการสแกนเฉพาะโพสต์ที่มีสื่ออยู่จริงเท่านั้น เพื่ออัปเดตเนื้อหาด้วยสื่อที่แปลแล้ว
อย่างไรก็ตาม สำหรับไซต์ที่มีขนาดใหญ่มาก กระบวนการตั้งค่าอาจสร้างภาระให้กับฐานข้อมูล ทำให้กระบวนการทั้งหมดช้ากว่าที่คาดไว้
ภาระส่วนใหญ่เกิดจากคิวรีที่จำเป็นในการระบุ ID ของไฟล์แนบตาม URL โดยปกติแล้ว ID ของไฟล์แนบสามารถระบุได้จากแอตทริบิวต์ของแท็ก HTML (เช่น id=”attachment_8” – ในที่นี้ 8 คือ ID ของไฟล์แนบ) เมื่อไม่ได้ใช้แอตทริบิวต์ดังกล่าว WPML Media จะระบุ ID จาก URL จริง ในกรณีนี้ จะมีการใช้คิวรีสองประเภท:
- คิวรีที่จับคู่กับฟิลด์ ‘guid’ ในตาราง wp_posts
- คิวรีอีกรายการที่จับคู่กับฟิลด์ meta_value ของตาราง wp_postmeta
อย่างไรก็ตาม ฟิลด์ตารางเหล่านี้ไม่มีการทำดัชนีตามค่าเริ่มต้น เนื่องจากเป็นการจับคู่ข้อความ (แม้จะไม่ใช่การค้นหาข้อความบางส่วน) สำหรับฐานข้อมูลขนาดใหญ่จึงอาจทำงานได้ช้า
วิธีแก้ปัญหาชั่วคราว
วิธีแก้ปัญานี้คือการเพิ่มอินเด็กซ์สำหรับฟิลด์เหล่านี้ (อย่างน้อยก็ชั่วคราว)
คุณสามารถทำได้โดยใช้คิวรี SQL สองรายการดังต่อไปนี้:
ALTER TABLE `wp_posts` ADD INDEX `guid` (`guid`);
ALTER TABLE `wp_postmeta` ADD INDEX `meta_value` (`meta_value`(512));
การเพิ่มเหล่านี้ไม่ควรส่งผลข้างเคียงใด ๆ ต่อฐานข้อมูลของคุณ นอกเหนือจากการทำให้ขนาดทางกายภาพของฐานข้อมูลบนดิสก์ใหญ่ขึ้นเล็กน้อย หากคุณต้องการย้อนกลับหลังจากรันการตั้งค่า WPML Media คุณสามารถทำได้โดยใช้คิวรี MySQL สองรายการดังต่อไปนี้:
ALTER TABLE `wp_posts` DROP INDEX `guid`;
ALTER TABLE `wp_postmeta` DROP INDEX `meta_value`;
หมายเหตุ: คำนำหน้า wp_ สำหรับตารางที่ระบุในคิวรีอาจแตกต่างกันไปตามการกำหนดค่า WordPress ของคุณ โดยปกติและตามค่าเริ่มต้นจะเป็น wp_
ตัวอย่างกรณีศึกษา: บนไซต์ที่มีไฟล์แนบประมาณ 140,000 รายการและมีโพสต์ประมาณ 5,000 โพสต์ การตั้งค่าอาจใช้เวลามากกว่า 30 นาทีจึงจะเสร็จสมบูรณ์ หลังจากเพิ่มอินเด็กซ์ การตั้งค่าจะใช้เวลาทำงานเพียงไม่กี่นาที การทดสอบนี้ทำขึ้นบนสภาพแวดล้อมสำหรับการพัฒนาทั่วไป ค่าเหล่านี้อาจดีกว่านี้ได้อีกบนเซิร์ฟเวอร์ที่ใช้งานจริง