ข้อผิดพลาดในการทำธุรกรรม 1c ฉันวินิจฉัยปัญหาการบล็อกได้อย่างไร ข้อผิดพลาดในการกำหนดค่า
“ ข้อขัดแย้งในการล็อคเมื่อดำเนินธุรกรรม: เกินเวลารอสูงสุดในการให้การล็อค” เป็นข้อผิดพลาดที่พบบ่อยใน 1C 8.3 และ 8.2 ที่เกี่ยวข้องกับการแข่งขันสำหรับการใช้ทรัพยากรในระบบ
ระบบ 1C ช่วยให้ผู้ใช้จำนวนมากสามารถทำงานแบบขนานได้ ตามที่การทดสอบโหลดแสดงให้เห็น ปัจจุบันจำนวนนี้ไม่ได้จำกัดอยู่ที่ผู้ใช้ห้าพันคนที่ทำงานพร้อมกันในระบบ อย่างไรก็ตาม เพื่อให้ฐานข้อมูล 1C 8 สามารถรองรับผู้ใช้จำนวนมากพร้อมกันได้ การกำหนดค่าจะต้องได้รับการออกแบบอย่างเหมาะสม
รับบทเรียนวิดีโอ 267 บทเรียนบน 1C ฟรี:
ดำเนินการจำนวนมาก
มีแนวโน้มว่าผู้ใช้บางรายเปิดตัว เช่น เป็นระยะเวลานานในธุรกรรมเดียว สถาปัตยกรรมของ 1C 8.3 ถือว่าระบบไม่อนุญาตให้เปลี่ยนแปลงข้อมูลที่ใช้ในธุรกรรมหนึ่งโดยผู้ใช้รายอื่นและบล็อกข้อมูลเหล่านั้น
นี่อาจเป็นข้อผิดพลาดชั่วคราวที่จะหยุดเกิดขึ้นเมื่อผู้ใช้รายอื่นใช้งานระบบเสร็จแล้ว หากข้อผิดพลาดนี้เกิดขึ้นบ่อยครั้ง ปัญหาน่าจะเกิดจากสาเหตุอื่น
ข้อผิดพลาดในการกำหนดค่า
นอกจากข้อผิดพลาดในโค้ดแล้ว ยังมีการตัดสินใจที่ไม่ถูกต้องตามระเบียบวิธีอีกด้วย ตัวอย่างเช่น ในตัวมันเองหมายถึงการประมวลผลเอกสารตามลำดับ การบัญชีแบบกลุ่มสามารถแทนที่ด้วย RAUZ ซึ่งจะเพิ่มประสิทธิภาพการทำงานของระบบอย่างจริงจัง
จะแก้ไขข้อผิดพลาดนี้ใน 1C 8.3 ได้อย่างไร
ไม่ว่าในกรณีใด การปรากฏตัวของข้อผิดพลาด "ล็อกข้อขัดแย้งเมื่อดำเนินธุรกรรม" บ่งชี้ถึงความจำเป็นในการตรวจสอบระบบ โดยเฉพาะอย่างยิ่งสำหรับระบบข้อมูลขนาดกลางและขนาดใหญ่ในโหมดไคลเอนต์เซิร์ฟเวอร์ (MS SQL, PostgreSQL ฯลฯ ) หากละเลยสิ่งนี้ตั้งแต่ระยะแรก ผลที่ตามมาที่ไม่สามารถย้อนกลับได้จะเกิดขึ้นในภายหลัง เมื่อการทำงานของระบบมีความสำคัญเป็นพิเศษ (ในช่วงระยะเวลาการรายงาน)
สำหรับการตรวจสอบและแก้ไขข้อผิดพลาด วิธีที่ดีที่สุดคือเลือกพันธมิตรที่เชื่อถือได้ เพียงโทรหาเรา เราจะแก้ไขปัญหาของคุณโดยเร็วที่สุด รายละเอียดในหน้าเพจ
ฉันไม่สามารถเขียนการเปลี่ยนแปลงเพื่อถ่ายโอนไปยังฐานข้อมูลแบบกระจายได้ ดังนั้นฉันจึงติดต่อฝ่ายสนับสนุน 1C และเสนอสิ่งต่อไปนี้ ฉันแก้ไขมันได้ง่ายๆ ด้วยการรีบูตแอปพลิเคชันเซิร์ฟเวอร์และเซิร์ฟเวอร์ SQL โดยทั่วไป คุณสามารถเลือกช่อง “การบล็อกกฎระเบียบได้
รวมงาน"
นอกจากนี้ยังช่วยได้โดยไม่ต้องรีบูตเครื่อง
การดำเนินงานประจำในระดับ DBMS สำหรับ MS SQL Server
คำแนะนำในการดำเนินการตามปกติในระดับ DBMS
ข้อมูลนี้ใช้กับ 1C:Enterprise 8 เวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ เมื่อใช้ MS SQL Server DBMS
ข้อมูลทั่วไป
สาเหตุที่พบบ่อยที่สุดประการหนึ่งสำหรับการทำงานของระบบที่ไม่เหมาะสมคือการดำเนินการตามปกติที่ระดับ DBMS ไม่ถูกต้องหรือไม่เหมาะสม เป็นสิ่งสำคัญอย่างยิ่งที่จะต้องดำเนินการตามขั้นตอนการกำกับดูแลเหล่านี้ในระบบข้อมูลขนาดใหญ่ที่ทำงานภายใต้ภาระงานจำนวนมากและให้บริการผู้ใช้จำนวนมากพร้อมกัน ลักษณะเฉพาะของระบบดังกล่าวคือการดำเนินการปกติที่ดำเนินการโดย DBMS โดยอัตโนมัติ (ตามการตั้งค่า) นั้นไม่เพียงพอสำหรับการทำงานที่มีประสิทธิภาพ
หากพบอาการใดๆ ของปัญหาประสิทธิภาพการทำงานในระบบที่รันอยู่ คุณควรตรวจสอบว่าระบบได้รับการกำหนดค่าอย่างถูกต้อง และดำเนินการตามปกติที่แนะนำทั้งหมดในระดับ DBMS เป็นประจำ
การดำเนินการตามขั้นตอนการกำกับดูแลต้องเป็นไปโดยอัตโนมัติ เพื่อให้การดำเนินการเหล่านี้เป็นไปโดยอัตโนมัติ ขอแนะนำให้ใช้เครื่องมือ MS SQL Server ในตัว: แผนการบำรุงรักษา ยังมีวิธีอื่นๆ เพื่อทำให้ขั้นตอนเหล่านี้เป็นไปโดยอัตโนมัติ ในบทความนี้ จะมีการให้ตัวอย่างการกำหนดค่าโดยใช้แผนการบำรุงรักษาสำหรับ MS SQL Server 2005 สำหรับแต่ละขั้นตอนการควบคุม
ขอแนะนำให้ติดตามความทันเวลาและความถูกต้องของขั้นตอนการกำกับดูแลเหล่านี้เป็นประจำ
อัพเดทสถิติ
MS SQL Server สร้างแผนการสืบค้นตามข้อมูลทางสถิติเกี่ยวกับการกระจายค่าในดัชนีและตาราง ข้อมูลทางสถิติจะถูกรวบรวมตามส่วนหนึ่ง (ตัวอย่าง) ของข้อมูล และจะได้รับการอัปเดตโดยอัตโนมัติเมื่อข้อมูลนี้มีการเปลี่ยนแปลง บางครั้งสิ่งนี้อาจไม่เพียงพอสำหรับ MS SQL Server ในการสร้างแผนที่เหมาะสมที่สุดสำหรับการดำเนินการค้นหาทั้งหมดอย่างสม่ำเสมอ
ในกรณีนี้ ปัญหาประสิทธิภาพการทำงานของแบบสอบถามอาจเกิดขึ้น ในเวลาเดียวกัน แผนแบบสอบถามจะแสดงสัญญาณลักษณะของการดำเนินงานที่ไม่เหมาะสม (การดำเนินงานที่ไม่เหมาะสม)
เพื่อรับประกันการทำงานที่ถูกต้องที่สุดของเครื่องมือเพิ่มประสิทธิภาพ MS SQL Server ขอแนะนำให้อัปเดตสถิติฐานข้อมูล MS SQL เป็นประจำ
เมื่อต้องการอัพเดตสถิติสำหรับตารางฐานข้อมูลทั้งหมด คุณต้องรันแบบสอบถาม SQL ต่อไปนี้:
exec sp_msforeachtable N "อัปเดตสถิติหรือไม่ ด้วย FULLSCAN"
การอัปเดตสถิติไม่นำไปสู่การล็อกตารางและจะไม่รบกวนการทำงานของผู้ใช้รายอื่น สามารถอัพเดตสถิติได้บ่อยเท่าที่จำเป็น ควรคำนึงว่าภาระบนเซิร์ฟเวอร์ DBMS จะเพิ่มขึ้นขณะอัปเดตสถิติซึ่งอาจส่งผลเสียต่อประสิทธิภาพโดยรวมของระบบ
ความถี่ที่เหมาะสมที่สุดสำหรับการอัปเดตสถิติขึ้นอยู่กับขนาดและลักษณะของโหลดบนระบบ และถูกกำหนดโดยการทดลอง แนะนำให้อัพเดตสถิติ อย่างน้อยวันละครั้ง.
แบบสอบถามด้านบนจะอัปเดตสถิติสำหรับตารางทั้งหมดในฐานข้อมูล ในระบบในชีวิตจริง ตารางที่ต่างกันต้องการอัตราการอัปเดตสถิติที่แตกต่างกัน ด้วยการวิเคราะห์แผนการสืบค้น คุณสามารถระบุได้ว่าตารางใดที่ต้องการการอัปเดตสถิติบ่อยครั้งที่สุด และตั้งค่าขั้นตอนประจำที่แตกต่างกันสองขั้นตอน (หรือมากกว่า) ได้แก่ สำหรับตารางที่อัปเดตบ่อยครั้งและสำหรับตารางอื่นๆ ทั้งหมด วิธีการนี้จะช่วยลดเวลาในการอัปเดตสถิติและผลกระทบของกระบวนการอัปเดตสถิติต่อการทำงานของระบบโดยรวมได้อย่างมาก
การตั้งค่าการอัพเดตสถิติอัตโนมัติ (MS SQL 2005)
เรียกใช้ MS SQL Server Management Studio และเชื่อมต่อกับเซิร์ฟเวอร์ DBMS เปิดโฟลเดอร์การจัดการและสร้างแผนการบำรุงรักษาใหม่:
สร้างแผนย่อย (เพิ่มแผนย่อย) และตั้งชื่อว่า “การอัปเดตสถิติ” เพิ่มงาน Update Statistics จากทาสก์บาร์:
กำหนดตารางการอัพเดตสถิติ แนะนำให้อัพเดตสถิติอย่างน้อยวันละครั้ง หากจำเป็น สามารถเพิ่มความถี่ในการอัปเดตสถิติได้
กำหนดการตั้งค่างาน โดยดับเบิลคลิกที่งานที่มุมล่างขวาของหน้าต่าง ในแบบฟอร์มที่ปรากฏขึ้น ให้ระบุชื่อของฐานข้อมูล (หรือหลายฐานข้อมูล) ที่จะอัปเดตสถิติ นอกจากนี้ คุณยังสามารถระบุได้ว่าควรอัปเดตสถิติของตารางใด (หากคุณไม่ทราบว่าต้องระบุตารางใดอย่างแน่ชัด ให้ตั้งค่าเป็นทั้งหมด)
สถิติจะต้องได้รับการอัปเดตโดยเปิดใช้งานตัวเลือกการสแกนแบบเต็ม
บันทึกแผนที่สร้างขึ้น เมื่อถึงเวลาที่ระบุในกำหนดการ การอัปเดตสถิติจะเริ่มขึ้นโดยอัตโนมัติ
การล้างแคชขั้นตอน
เครื่องมือเพิ่มประสิทธิภาพ MS SQL Server แคชแผนการสอบถามสำหรับการดำเนินการใหม่ การทำเช่นนี้เพื่อประหยัดเวลาที่ใช้ในการคอมไพล์แบบสอบถาม หากมีการดำเนินการแบบสอบถามเดียวกันและทราบแผนของแบบสอบถามแล้ว
เป็นไปได้ว่า MS SQL Server จะสร้างแผนการสืบค้นที่ไม่เหมาะสมซึ่งใช้ข้อมูลทางสถิติที่ล้าสมัย แผนนี้จะถูกจัดเก็บไว้ในแคชขั้นตอนและใช้เมื่อมีการเรียกแบบสอบถามเดียวกันอีกครั้ง ถ้าคุณอัปเดตสถิติแต่ไม่ได้ล้างแคชของขั้นตอน SQL Server อาจเลือกแผนแบบสอบถามเก่า (ต่ำกว่า) จากแคชแทนที่จะสร้างแผนใหม่ (เหมาะสมที่สุด)
เมื่อต้องการล้างแคชขั้นตอนของ MS SQL Server คุณจำเป็นต้องเรียกใช้แบบสอบถาม SQL ต่อไปนี้:
ควรเรียกใช้แบบสอบถามนี้ทันทีหลังจากอัปเดตสถิติ ดังนั้นความถี่ของการดำเนินการควรตรงกับความถี่ของการอัปเดตสถิติ
การตั้งค่าการล้างแคชตามขั้นตอน (MS SQL 2005)
เนื่องจากต้องล้างแคชขั้นตอนทุกครั้งที่อัปเดตสถิติ จึงแนะนำให้เพิ่มการดำเนินการนี้ลงในแผนย่อย "การอัปเดตสถิติ" ที่สร้างไว้แล้ว เมื่อต้องการทำเช่นนี้ ให้เปิดแผนย่อยและเพิ่มงาน Execute T-SQL Statement ไปยังสคีมา จากนั้นคุณควรเชื่อมต่อ Update Statistics Task ด้วยลูกศรเข้ากับงานใหม่
ในข้อความของงาน Execute T-SQL Statement ที่สร้างขึ้น คุณควรระบุคำขอ “DBCC FREEPROCCACHE”:
การจัดเรียงข้อมูลดัชนี
เมื่อทำงานอย่างเข้มข้นกับตารางฐานข้อมูล ผลกระทบของการกระจายตัวของดัชนีจะเกิดขึ้น ซึ่งอาจส่งผลให้ประสิทธิภาพของคิวรีลดลง
sp_msforeachtable N "ดัชนี DBCC DEFRAG (<имя базы данных>, ""?"")"
ดัชนีการจัดเรียงข้อมูลไม่ล็อคตารางและจะไม่รบกวนการทำงานของผู้ใช้รายอื่น แต่จะสร้างภาระเพิ่มเติมบน SQL Server ควรเลือกความถี่ที่เหมาะสมที่สุดในการดำเนินการขั้นตอนประจำนี้ตามโหลดบนระบบและผลที่ได้รับจากการจัดเรียงข้อมูล ขอแนะนำให้คุณจัดเรียงข้อมูลดัชนีอย่างน้อยสัปดาห์ละครั้ง
คุณสามารถจัดเรียงตารางตั้งแต่หนึ่งตารางขึ้นไป แทนที่จะจัดเรียงตารางทั้งหมดในฐานข้อมูล
การตั้งค่าการจัดเรียงข้อมูลดัชนี (MS SQL 2005)
ในแผนการบำรุงรักษาที่สร้างไว้ก่อนหน้านี้ ให้สร้างแผนย่อยใหม่ชื่อ "การทำดัชนีใหม่" เพิ่มงานสร้างดัชนีใหม่ลงไป:
กำหนดตารางการดำเนินการสำหรับงานจัดเรียงข้อมูลดัชนี ขอแนะนำให้ดำเนินการอย่างน้อยสัปดาห์ละครั้ง และหากข้อมูลในฐานข้อมูลมีความผันแปรสูง บ่อยครั้งมากขึ้น - มากถึงวันละครั้ง
การจัดทำดัชนีตารางฐานข้อมูลใหม่
การทำดัชนีตารางใหม่เกี่ยวข้องกับการสร้างดัชนีตารางฐานข้อมูลใหม่ทั้งหมด ซึ่งนำไปสู่การเพิ่มประสิทธิภาพการทำงานอย่างมีนัยสำคัญ ขอแนะนำให้จัดทำดัชนีตารางฐานข้อมูลของคุณใหม่เป็นประจำ หากต้องการสร้างดัชนีตารางฐานข้อมูลทั้งหมดใหม่ คุณต้องเรียกใช้แบบสอบถาม SQL ต่อไปนี้:
sp_msforeachtable N "DBCC DBREINDEX (""?")"
การจัดทำดัชนีตารางใหม่จะล็อกตารางไว้ตลอดระยะเวลาการดำเนินการ ซึ่งอาจส่งผลต่อประสบการณ์ผู้ใช้อย่างมาก ในเรื่องนี้ ขอแนะนำให้ทำการจัดทำดัชนีใหม่ระหว่างโหลดระบบขั้นต่ำ
หลังจากการจัดทำดัชนีใหม่เสร็จสิ้นแล้ว ไม่จำเป็นต้องจัดเรียงข้อมูลดัชนีอีกต่อไป
การตั้งค่าการจัดทำดัชนีตารางใหม่ (MS SQL 2005)
ในแผนการบำรุงรักษาที่สร้างขึ้นก่อนหน้านี้ ให้สร้างแผนย่อยใหม่ชื่อ Index Defragmentation เพิ่มงาน Rebuild Index เข้าไป:
กำหนดตารางการดำเนินการสำหรับงานจัดทำดัชนีตารางใหม่ ขอแนะนำให้ดำเนินการนี้ระหว่างโหลดระบบขั้นต่ำ อย่างน้อยสัปดาห์ละครั้ง
ตั้งค่างานโดยระบุฐานข้อมูล (หรือหลายฐานข้อมูล) และเลือกตารางที่ต้องการ หากคุณไม่ทราบว่าควรระบุตารางใดอย่างแน่ชัด ให้ตั้งค่าเป็นทั้งหมด
เมื่อผู้ใช้หลายร้อยคนทำงานกับโปรแกรมและข้อมูลพร้อมกัน ปัญหาก็เกิดขึ้นซึ่งเป็นลักษณะเฉพาะของโซลูชันขนาดใหญ่เท่านั้น เรากำลังพูดถึงปัญหาที่เกิดจากการบล็อกข้อมูล
บางครั้งผู้ใช้เรียนรู้เกี่ยวกับการบล็อกจากข้อความที่ระบุว่าไม่สามารถเขียนข้อมูลหรือดำเนินการอื่นได้ บางครั้งเนื่องจากประสิทธิภาพของโปรแกรมลดลงอย่างมาก (เช่น เมื่อเวลาที่ต้องใช้ในการดำเนินการเพิ่มขึ้นหลายสิบหรือหลายร้อยครั้ง)
ปัญหาที่เกิดจากการบล็อคไม่มีวิธีแก้ปัญหาทั่วไป ดังนั้นเราจะพยายามวิเคราะห์สาเหตุของปัญหาดังกล่าวและจัดระบบทางเลือกในการแก้ไขปัญหาเหล่านั้น
เหตุผลในการบล็อกธุรกรรม
ก่อนอื่นมาจำกันก่อนว่าล็อคคืออะไรและในขณะเดียวกันก็พิจารณาว่าจำเป็นหรือไม่ เรามาดูตัวอย่างคลาสสิกของการอุดตันที่เราพบในชีวิตกันดีกว่า
ตัวอย่างที่ 1: การซื้อตั๋วเครื่องบินหรือรถไฟ สมมติว่าเราแสดงความปรารถนาของเราต่อแคชเชียร์ แคชเชียร์แจ้งที่นั่งว่างให้เราทราบ ซึ่งเราจะสามารถเลือกที่นั่งที่เราชอบที่สุดได้ (แน่นอนว่ามีหลายที่นั่ง) แม้ว่าเราจะเลือกและยืนยันข้อตกลงกับตัวเลือกที่เสนอ ที่นั่งเหล่านี้จะไม่สามารถขายให้กับบุคคลอื่นได้ กล่าวคือ ถูก “บล็อค” ชั่วคราว หากไม่ถูกบล็อก เมื่อถึงเวลายืนยัน อาจมีสถานการณ์ที่ตั๋วที่เราเลือกถูกขายไปแล้ว และในกรณีนี้รอบการคัดเลือกอาจมีจำนวนซ้ำที่ไม่สามารถคาดเดาได้ ระหว่างเลือกสถานที่ก็ขายไปแล้ว!.. ขณะที่เราเลือกที่อื่นก็ไม่มีแล้ว...
ตัวอย่างที่ 2: การซื้อของในร้านค้าหรือที่ตลาดสด เราเดินไปที่เคาน์เตอร์และเลือกแอปเปิ้ลที่สวยที่สุดจากที่มีอยู่หลายร้อยผล พวกเขาเลือกมันและล้วงเข้าไปในกระเป๋าเพื่อเงิน จะเป็นอย่างไรหากในขณะนั้นเรากำลังนับเงินแอปเปิ้ลที่เราเลือกไว้จะถูกขายให้กับผู้ซื้อที่เข้ามาช้ากว่าเรา?
ดังนั้นการปิดกั้นตัวเองจึงเป็นปรากฏการณ์ที่จำเป็นและมีประโยชน์ ต้องขอบคุณการบล็อกที่เรารับประกันว่าการดำเนินการจะเสร็จสิ้นในขั้นตอนเดียว และสิ่งที่มักนำไปสู่การปฏิเสธไม่ใช่การใช้งานซอฟต์แวร์ที่ประสบความสำเร็จมากที่สุด ตัวอย่างเช่น:
- วัตถุจำนวนมากเกินไป (ตั๋ว, แอปเปิ้ล) ถูกบล็อก
- เวลาในการบล็อกถูกขยายออกไปอย่างไม่สมเหตุสมผล
การบล็อกมากเกินไปในการกำหนดค่า 1C ทั่วไป
ในโครงการขนาดใหญ่ ตามกฎแล้วเราใช้ 1C:Enterprise ดังนั้นเราจะพยายามอธิบายคำแนะนำเชิงปฏิบัติสำหรับการแก้ปัญหาการบล็อกโดยใช้ตัวอย่างของชุดค่าผสม 1C:Enterprise + MS-SQL
1C:Enterprise รุ่นที่ 8 มอบการใช้งานแบบขนานที่ดีมาก ผู้ใช้จำนวนมากสามารถทำงานพร้อมกันด้วยการกำหนดค่าเดียว (นั่นคือบนฐานเดียว) กับเซิร์ฟเวอร์และช่องทางการสื่อสารปกติ ตัวอย่างเช่น เจ้าของร้านหลายร้อยคนดำเนินการออกหรือรับสินค้า นักเศรษฐศาสตร์คำนวณค่าแรงสำหรับแผนกต่างๆ ไปพร้อมๆ กัน นักบัญชีดำเนินการคำนวณและจ่ายเงินเดือน ฯลฯ
แต่มีเหตุผลว่าทำไมจึงมีความคิดเห็นที่ตรงกันข้าม - ตำนานที่ว่าด้วยการใช้งานพร้อมกันอย่างเข้มข้นการทำงานกับโซลูชันที่ใช้ 1C:Enterprise นั้นอึดอัดหรือเป็นไปไม่ได้ ท้ายที่สุดทันทีที่โซลูชันมาตรฐานสำหรับ 1C:Enterprise เริ่มมีการใช้งานโดยผู้ใช้หลายร้อยคนในระดับอุตสาหกรรม หน้าต่างจะปรากฏขึ้นบนหน้าจอมากขึ้นเรื่อย ๆ พร้อมข้อความที่น่าภาคภูมิใจ: "เกิดข้อผิดพลาดเมื่อเรียกวิธีบริบท (เขียน) : การล็อกข้อขัดแย้งเมื่อดำเนินธุรกรรม: ..." และอื่นๆ ขึ้นอยู่กับประเภทของเซิร์ฟเวอร์ SQL ที่ใช้ บางอย่างเช่น "Microsoft OLE DB Provider for SQL Server: เกินระยะเวลาหมดเวลาการร้องขอการล็อก …”.
โซลูชันมาตรฐานเกือบทั้งหมดในการใช้งานแบบสำเร็จรูปที่เสนอได้รับการกำหนดค่าสำหรับการจัดการล็อคอัตโนมัติ “อัตโนมัติ” ในที่นี้อาจถูกมองว่าเป็น “หวาดระแวง” ในกรณีที่เมื่อประมวลผลเอกสารใด ๆ เราจะบล็อกทุกสิ่งที่อาจเชื่อมโยงกับเอกสารนั้น ปรากฎว่าเมื่อผู้ใช้คนหนึ่งทำอะไรบางอย่าง (และบางครั้งก็แค่เขียนลงไป) ส่วนที่เหลือก็ได้แต่รอเท่านั้น
ฉันจะแสดงความคิดเห็นว่าทำไม 1C ตัดสินใจไม่กำหนดค่าโซลูชันมาตรฐานสำหรับการใช้งานแบบขนานในระดับสูง ต้นทุนค่าแรงสำหรับการปรับเปลี่ยนดังกล่าวไม่สูง - หลาย "เดือนคน" ซึ่งไม่สำคัญในระดับ 1C สำหรับฉันดูเหมือนว่าเหตุผลนั้นแตกต่างออกไป
ประการแรกการปรับเปลี่ยนดังกล่าวทำให้การประมวลผลเอกสารทั้งหมดมีความซับซ้อนอย่างมาก ซึ่งหมายความว่าสำหรับผู้บริโภคที่ใช้ 1C สำหรับงานเล็ก ๆ จะมีเพียงข้อเสียเปรียบโดยไม่ได้รับผลประโยชน์ใด ๆ - ความยากในการปรับเปลี่ยนการกำหนดค่ามาตรฐานจะซับซ้อนมากขึ้น สถิติในเวลาเดียวกันแนะนำว่าลูกค้าประเภทใดที่เป็นช่องทางการให้อาหารหลักสำหรับ 1C...
เหตุผลที่สองฝังอยู่ในการตั้งค่าพื้นฐานทั่วไปของเซิร์ฟเวอร์ SQL เช่น MS-SQL ซึ่งยังคงใช้บ่อยกว่าผู้อื่น มันเพิ่งเกิดขึ้นที่ลำดับความสำคัญในการตั้งค่าถูกมอบให้กับการบันทึก RAM ของเซิร์ฟเวอร์ แทนที่จะลดการบล็อก สิ่งนี้นำไปสู่ความจริงที่ว่าหากจำเป็นต้องล็อคหลายแถวเซิร์ฟเวอร์ SQL จะทำการตัดสินใจ "ประหยัดหน่วยความจำและโปรเซสเซอร์" - เพื่อล็อคทั้งตารางในครั้งเดียว!..
ข้อบกพร่องเหล่านี้ในโซลูชันมาตรฐานหรือข้อมูลเฉพาะของการตั้งค่าเซิร์ฟเวอร์ฐานข้อมูลที่ใช้ มักถูกระบุด้วยปัญหาที่เกิดจากการบล็อก เป็นผลให้ข้อบกพร่องทางเทคนิคนำไปสู่ปัญหาองค์กรที่สำคัญมาก ท้ายที่สุดแล้ว หากพนักงานได้รับเหตุผลให้ถูกรบกวนจากงานหรือให้เหตุผลว่าทำไมงานถึงไม่สำเร็จ คนกลุ่มน้อยก็จะทำงานได้อย่างมีประสิทธิภาพ ข้อความเกี่ยวกับการบล็อกธุรกรรมหรือโปรแกรม "เบรก" นั้นเป็นเหตุผลในอุดมคติว่าทำไมบางสิ่งถึงไม่สามารถทำได้
คำแนะนำสำหรับการกำจัดการบล็อกที่มากเกินไปสำหรับ 1C: ENTERPRISE
จะทำอย่างไรถ้าการแก้ปัญหาการล็อคมากเกินไปเป็นเรื่องสำคัญ?
ในขั้นตอนสุดท้ายของการใช้งานคอมเพล็กซ์ขนาดใหญ่ทั้งหมด จำเป็นต้องดำเนินการปรับแต่งอย่างละเอียดเพื่อกำจัดการบล็อกธุรกรรมที่ไม่จำเป็น เป็นสิ่งสำคัญในการแก้ไขปัญหาที่อาจเกิดขึ้นเนื่องจากเงื่อนไขการบล็อกหรือเทคนิคการใช้งานที่พัฒนาไม่เพียงพอ
เพราะ การดำเนินการนี้มีความสำคัญอย่างยิ่งและต้องทำอย่างต่อเนื่อง ดังนั้น เพื่อให้การปรับเปลี่ยนดังกล่าวง่ายขึ้น เราได้จัดทำคำแนะนำพื้นฐานจำนวนหนึ่งที่เราพยายามปฏิบัติตาม คำแนะนำที่ได้รับและทดสอบผ่านประสบการณ์การใช้งานขนาดใหญ่จำนวนมาก
- หาก DBMS หรือระบบการพัฒนาที่คุณใช้ (เช่น 1C:Enterprise) ใช้โหมดการล็อคข้อมูลอัตโนมัติตามค่าเริ่มต้น ให้ปฏิเสธการจัดการการล็อคอัตโนมัติ กำหนดค่ากฎการบล็อกด้วยตนเอง อธิบายเกณฑ์ในการบล็อกทั้งตารางหรือแต่ละแถว
- เมื่อพัฒนาโปรแกรม ทุกครั้งที่เป็นไปได้ ให้เข้าถึงตารางในลำดับเดียวกัน
- พยายามอย่าเขียนลงในตารางเดียวกันหลายครั้งภายในธุรกรรมเดียวกัน หากเป็นเรื่องยาก อย่างน้อยก็ลดช่วงเวลาระหว่างการดำเนินการเขียนครั้งแรกและครั้งสุดท้ายให้เหลือน้อยที่สุด
- วิเคราะห์ความเป็นไปได้ของการปิดใช้งานการเลื่อนระดับการล็อกในระดับเซิร์ฟเวอร์ SQL
- แจ้งให้ผู้ใช้ทราบอย่างชัดเจนถึงสาเหตุที่ไม่สามารถดำเนินการใดๆ ได้หากเกิดจากการบล็อก ให้คำแนะนำที่เข้าถึงได้และเข้าใจได้เกี่ยวกับสิ่งที่ต้องทำต่อไป
หากคุณดูคำแนะนำอย่างละเอียดก็จะชัดเจนว่า การทดสอบดังกล่าวมีความเหมาะสมไม่เพียงแต่สำหรับ 1C:Enterprise เท่านั้น แต่ยังสำหรับระบบอื่นๆ ด้วย. ไม่สำคัญเลยว่าพวกเขาเขียนด้วยภาษาใดและทำงานกับเซิร์ฟเวอร์ฐานข้อมูลใด คำแนะนำส่วนใหญ่มีลักษณะเป็นสากล ดังนั้นจึงใช้ได้เท่าเทียมกันเมื่อใช้ 1C:Enterprise และสำหรับโปรแกรม "ที่เขียนเองที่บ้าน" หรือระบบ ERP "ชนิดบรรจุกล่อง" อื่นๆ
ป.ล. คุณรู้ไหมว่าเราให้ความช่วยเหลืออย่างมืออาชีพในการอัปเดต 1C ในราคาที่ดีที่สุด
แท็กที่จะค้นหา:- ล็อคธุรกรรม
- ขจัดสิ่งอุดตัน
- ล็อค 1C
- ล็อค
- ล็อคข้อขัดแย้ง
- ล็อคการโต้แย้งระหว่างการทำธุรกรรม
ไม่ใช่เรื่องแปลกเมื่อทำงานใน 1C ที่จะได้รับข้อผิดพลาด "ล็อกข้อขัดแย้งเมื่อดำเนินการธุรกรรม: เกินเวลารอสูงสุดในการให้ล็อก" สาระสำคัญอยู่ที่ความจริงที่ว่าหลายเซสชันพยายามดำเนินการที่คล้ายกันพร้อมกันซึ่งส่งผลกระทบต่อทรัพยากรเดียวกัน วันนี้เราจะมาดูวิธีแก้ไขข้อผิดพลาดนี้
มีการดำเนินการจำนวนมาก
ขั้นตอนแรกในการหาเหตุผลคือการชี้แจงจำนวนผู้ใช้ที่เกิดขึ้นพร้อมกันในฐานข้อมูลที่เกิดข้อผิดพลาดดังกล่าว ดังที่เราทราบ จำนวนสูงสุดอาจมีค่อนข้างมาก นี่ทั้งหนึ่งพันและห้าพัน
กลไกของการล็อคและการทำธุรกรรมอธิบายไว้ในคู่มือของนักพัฒนา ใช้เมื่อหลายเซสชันเข้าถึงข้อมูลเดียวกันพร้อมกัน เป็นเหตุผลที่ผู้ใช้รายอื่นไม่สามารถเปลี่ยนแปลงข้อมูลเดียวกันในเวลาเดียวกันได้
คุณควรตรวจสอบด้วยว่ามีผู้ใช้รายใดกำลังประมวลผลการเปลี่ยนแปลงข้อมูลจำนวนมากหรือไม่ อาจจะเป็นประมาณปลายเดือนและอื่นๆ ในกรณีนี้ หลังจากการประมวลผลเสร็จสิ้น ข้อผิดพลาดจะหายไปเอง
งานที่กำหนดเวลาไว้
ไม่ใช่เรื่องแปลกที่สาเหตุของข้อผิดพลาดจะอยู่ในระบบที่ประมวลผลข้อมูลจำนวนมาก ขอแนะนำให้ทำสิ่งนี้ในเวลากลางคืน กำหนดตารางเวลาการปฏิบัติงานประจำดังกล่าวนอกเวลาทำงาน
ด้วยวิธีนี้ ผู้ใช้จะทำงานในระบบที่เสถียร และงานประจำเองก็จะสำเร็จลุล่วงได้สำเร็จ เนื่องจากโอกาสที่จะเกิดข้อขัดแย้งกับเซสชันผู้ใช้จะลดลง
"เซสชันที่หยุดทำงาน"
ปัญหา "เซสชันที่ค้าง" ของผู้ใช้เป็นเรื่องที่คุ้นเคยสำหรับเกือบทุกคนที่พบกับการบำรุงรักษา 1C ผู้ใช้อาจออกจากโปรแกรมไปนานแล้วหรือปิดเอกสาร แต่เซสชันของเขายังคงอยู่ในระบบ ปัญหาส่วนใหญ่มักถูกแยกออกจากกันและเพียงพอที่จะยุติเซสชันดังกล่าวผ่านคอนโซลผู้ดูแลระบบ ปัญหาเดียวกันนี้อาจเกิดขึ้นได้กับงานเบื้องหลัง
ตามความคิดเห็นมากมายบนอินเทอร์เน็ต สถานการณ์ดังกล่าวพบได้บ่อยมากขึ้นเมื่อใช้คีย์ความปลอดภัยเครือข่าย หากสถานการณ์ที่มี "เซสชันค้าง" เกิดขึ้นซ้ำอย่างเป็นระบบ นี่เป็นเหตุผลในการตรวจสอบและบำรุงรักษาระบบและเซิร์ฟเวอร์อย่างละเอียด (หากฐานข้อมูลเป็นไคลเอนต์ - เซิร์ฟเวอร์)
ข้อผิดพลาดเมื่อเขียนการกำหนดค่า
การกำหนดค่ามาตรฐานทั้งหมดได้รับการพัฒนาโดยผู้เชี่ยวชาญและผู้เชี่ยวชาญที่มีคุณสมบัติเหมาะสม แต่ละระบบได้รับการทดสอบอย่างละเอียดและปรับให้เหมาะสมเพื่อการทำงานที่รวดเร็วและถูกต้องมากขึ้น
ในเรื่องนี้สาเหตุของข้อผิดพลาดอาจอยู่ในโค้ดที่ไม่ดีซึ่งเขียนโดยนักพัฒนาบุคคลที่สาม นี่อาจเป็นคำขอ "จำนวนมาก" ที่จะบล็อกข้อมูลเป็นระยะเวลานาน นอกจากนี้ยังมีกรณีของการสร้างอัลกอริธึมที่มีประสิทธิภาพต่ำและมีการละเมิดตรรกะอยู่บ่อยครั้ง
มีความเป็นไปได้สูงที่ข้อขัดแย้งในการล็อคเกิดขึ้นอย่างแน่นอนเนื่องจากข้อผิดพลาดของนักพัฒนาหากเกิดขึ้นหลังจากการอัพเดตโปรแกรม หากต้องการตรวจสอบ คุณสามารถ "ย้อนกลับ" การปรับปรุงหรือปรับโครงสร้างโค้ดใหม่ได้
ในระบบที่มีผู้ใช้หลายคน การจัดโครงสร้างที่ถูกต้องและการตั้งค่าการล็อคมีบทบาทสำคัญ หากไม่มี ผู้ใช้มักจะต้องจัดการกับข้อผิดพลาดที่เกิดจากการแข่งขันแย่งชิงทรัพยากรระบบบางอย่าง แต่มีปัญหาข้อขัดแย้งในการล็อคที่ผู้ใช้หลายคนคุ้นเคย เหตุใดข้อขัดแย้งในการล็อค 1C จึงเกิดขึ้นและจะแก้ไขได้อย่างไร
ล็อคข้อขัดแย้งใน 1C 8.3 และความหมาย
สำหรับผู้ใช้ส่วนใหญ่ ข้อความเกี่ยวกับข้อขัดแย้งในการล็อค 1C หมายถึงข้อผิดพลาดที่ทำให้พวกเขาไม่สามารถทำงานได้ พวกเขาต้องการกำจัดปัญหานี้โดยเร็วที่สุดและปิดล้อมแผนกไอทีด้วยการร้องเรียนว่า "1C ใช้งานไม่ได้"
แต่สำหรับผู้ดูแลระบบและนักพัฒนาข้อความดังกล่าวระบุว่าอาจมีปัญหาในโครงสร้างการกำหนดค่า ก่อนที่คุณจะพยายามทำให้ผู้ใช้พอใจและกำจัดการอุดตันคุณต้องวิเคราะห์สถานการณ์และทำความเข้าใจสาเหตุของข้อความแสดงข้อผิดพลาด
เหตุผลในการบล็อกข้อผิดพลาดใน 1C
การทดสอบโหลดสาธิตแสดงให้เห็นว่าเซิร์ฟเวอร์ 1C สามารถทนต่อการทำงานแบบขนานของผู้ใช้มากกว่าห้าพันคน แต่สภาวะในอุดมคติสำหรับการทดลองดังกล่าวนั้นไม่สามารถบรรลุได้ในสภาพแวดล้อมประจำวันของบริษัทขนาดใหญ่และขนาดกลาง เพื่อให้บรรลุประสิทธิภาพที่คล้ายคลึงกันและการดำเนินงานที่ปราศจากข้อผิดพลาด การกำหนดค่าจะต้องได้รับการออกแบบอย่างเหมาะสมและปรับแต่งให้เหมาะกับกระบวนการทางธุรกิจเฉพาะขององค์กร
หากเราไม่ใช้ตัวเลือกในอุดมคติ ข้อขัดแย้งในการล็อค 1C จะเกิดขึ้นด้วยเหตุผลดังต่อไปนี้:
การทำงานพร้อมกันของผู้ใช้ที่มีข้อมูลจำนวนมากสาเหตุที่แท้จริงนี้กำหนดโดยกลไกภายในของ 1C พวกเขาเกี่ยวข้องกับการห้ามการเปลี่ยนแปลงข้อมูลที่เกี่ยวข้องกับธุรกรรมที่เปิดตัวในนามของผู้ใช้รายอื่น
ข้อผิดพลาดและการละเว้นในการกำหนดค่าโครงสร้างของโซลูชันมาตรฐานจากบริษัท 1C คำนึงถึงคำแนะนำเพื่อเพิ่มผลผลิตสูงสุด แต่นักพัฒนาบุคคลที่สามไม่ได้ปฏิบัติตามมาตรฐานระดับสูงเสมอไป และมักพบข้อบกพร่องต่อไปนี้ในโค้ดของพวกเขา:
- ข้อความค้นหาที่ไม่เหมาะสม;
- ขอยอดคงเหลือเมื่อเริ่มดำเนินการ
- ความเข้าใจผิดเกี่ยวกับวัตถุประสงค์ของออบเจ็กต์การกำหนดค่าและการใช้งานที่ไม่ถูกต้อง
- ความซ้ำซ้อนของอินเตอร์ล็อคที่สร้างขึ้นในระบบหรือการพัฒนาเพิ่มเติม
วิธีแก้ไขข้อขัดแย้งในการล็อคใน 1C 8.3
ข้อความของระบบ "การล็อกข้อขัดแย้งเมื่อดำเนินการธุรกรรม 1C 8.3" ไม่ได้ระบุลักษณะของการกำหนดค่าตามการออกแบบที่ไม่ถูกต้อง แต่หากละเลยสัญญาณดังกล่าว ก็มีโอกาสที่จะประสบปัญหาใหญ่ในช่วงเวลาที่สำคัญที่สุด เช่น เมื่อส่งรายงานรายไตรมาสหรือประจำปี ที่ดีที่สุดคือระบบที่เชื่องช้าและผู้ใช้ไม่พอใจ ที่แย่ที่สุด ข้อมูลเอาต์พุตไม่ถูกต้อง ซึ่งอาจนำไปสู่บทลงโทษจากหน่วยงานกำกับดูแล
วิธีแก้ปัญหาข้อขัดแย้งในการล็อคใน 1C 8.3 คือการถ่ายโอนการกำหนดค่าไปยังโหมดการจัดการล็อคที่ได้รับการจัดการ (ด้วยตนเอง) ใช้งานในเวอร์ชัน 8.1 กลไกที่อยู่ในมือของผู้เชี่ยวชาญที่มีความสามารถช่วยแก้ปัญหาข้อขัดแย้งในการล็อคระหว่างธุรกรรมใน 1C
แต่ควรจำไว้ว่าการกระทำนี้จะลดระดับการปกป้องข้อมูลจากการเปลี่ยนแปลงในขณะที่ผู้ใช้รายอื่นอ่าน ดังนั้นหากคุณไม่พร้อมที่จะควบคุมการล็อคทั้งหมดในระบบอย่างอิสระอย่ารีบเร่งที่จะเปลี่ยนการตั้งค่ากำหนด
วิธีแก้ปัญหาข้อขัดแย้งในการล็อค 1C อย่างรวดเร็ว
ในการทำงานของผู้ดูแลระบบหรือนักพัฒนา สถานการณ์อาจเกิดขึ้นเมื่อไม่มีเวลาตรวจสอบข้อผิดพลาดและค้นหาสาเหตุที่แท้จริงของปัญหา ตัวอย่างเช่น จำเป็นต้องส่งรายงานหรือส่งข้อมูลภายในระยะเวลาหนึ่ง แต่ข้อผิดพลาดในการบล็อก 1C จะป้องกันสิ่งนี้
มีสองวิธีในการแก้ปัญหาอย่างรวดเร็ว:
- ค้นหาและสิ้นสุดเซสชันที่บล็อกข้อมูลที่จำเป็น ในบริษัทขนาดเล็กที่จำนวนผู้ใช้ 1C ไม่เกินสองสามโหล นี่เป็นทางออกที่ดีที่สุด
- หากคุณควบคุมระบบที่มีพนักงานหลายร้อยคน การค้นหาเซสชันที่เหมาะสมโดยไม่ต้องใช้ซอฟต์แวร์พิเศษอาจใช้เวลานาน ในกรณีนี้ การรีสตาร์ทเซิร์ฟเวอร์จะมีประสิทธิภาพมากกว่ามาก
โซลูชันเหล่านี้มีความรุนแรงและมุ่งเป้าไปที่การแก้ปัญหาอย่างรวดเร็วและเพิ่มข้อมูลว่างสำหรับการรายงานเร่งด่วนเท่านั้น สามารถกำจัดให้หมดสิ้นได้โดยการทำความเข้าใจเหตุผลว่าทำไมข้อขัดแย้งในการล็อคจึงเกิดขึ้นเมื่อดำเนินการธุรกรรม 1C หลังจากดำเนินการดังกล่าว จำเป็นต้องค้นหาช่องโหว่ในระบบ เพิ่มประสิทธิภาพการกำหนดค่าหรือการทำงานของพนักงาน ไม่แนะนำให้ใช้มาตรการดังกล่าวอย่างต่อเนื่องในกรณีที่มีข้อขัดแย้งในการล็อคธุรกรรมเป็นประจำ