วิธีแก้ไขข้อขัดแย้งการล็อค 1s 8.3 ฉันวินิจฉัยปัญหาการบล็อกได้อย่างไร มีการดำเนินการจำนวนมาก

ไม่ใช่เรื่องแปลกเมื่อทำงานใน 1C ที่จะได้รับข้อผิดพลาด "ล็อกข้อขัดแย้งเมื่อดำเนินการธุรกรรม: เกินเวลารอสูงสุดในการให้ล็อก" สาระสำคัญอยู่ที่ความจริงที่ว่าหลายเซสชันพยายามดำเนินการที่คล้ายกันพร้อมกันซึ่งส่งผลกระทบต่อทรัพยากรเดียวกัน วันนี้เราจะมาดูวิธีแก้ไขข้อผิดพลาดนี้

มีการดำเนินการจำนวนมาก

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

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

คุณควรตรวจสอบว่ามีผู้ใช้รายใดเริ่มประมวลผลด้วยหรือไม่ การเปลี่ยนแปลงครั้งใหญ่ข้อมูล. อาจจะเป็นประมาณปลายเดือนและอื่นๆ ในกรณีนี้ หลังจากการประมวลผลเสร็จสิ้น ข้อผิดพลาดจะหายไปเอง

งานที่กำหนดเวลาไว้

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

ด้วยวิธีนี้ ผู้ใช้จะทำงานในระบบที่เสถียร และงานประจำเองก็จะสำเร็จลุล่วงได้สำเร็จ เนื่องจากโอกาสที่จะเกิดข้อขัดแย้งกับเซสชันผู้ใช้จะลดลง

"เซสชันที่หยุดทำงาน"

ปัญหา "เซสชันที่ค้าง" ของผู้ใช้เป็นเรื่องที่คุ้นเคยสำหรับเกือบทุกคนที่พบกับบริการ 1C ผู้ใช้อาจออกจากโปรแกรมไปนานแล้วหรือปิดเอกสาร แต่เซสชันของเขายังคงอยู่ในระบบ ปัญหาส่วนใหญ่มักถูกแยกออกจากกันและเพียงพอที่จะยุติเซสชันดังกล่าวผ่านคอนโซลผู้ดูแลระบบ ปัญหาเดียวกันนี้อาจเกิดขึ้นได้กับงานเบื้องหลัง

ตามความคิดเห็นมากมายบนอินเทอร์เน็ต สถานการณ์ดังกล่าวพบได้บ่อยมากขึ้นเมื่อใช้คีย์ความปลอดภัยเครือข่าย หากสถานการณ์ที่มี "เซสชันค้าง" เกิดขึ้นซ้ำอย่างเป็นระบบ นี่เป็นเหตุผลในการตรวจสอบและบำรุงรักษาระบบและเซิร์ฟเวอร์อย่างละเอียด (หากฐานข้อมูลเป็นไคลเอนต์ - เซิร์ฟเวอร์)

ข้อผิดพลาดเมื่อเขียนการกำหนดค่า

การกำหนดค่ามาตรฐานทั้งหมดได้รับการพัฒนาโดยผู้เชี่ยวชาญและผู้เชี่ยวชาญที่มีคุณสมบัติเหมาะสม แต่ละระบบได้รับการทดสอบอย่างละเอียดและปรับให้เหมาะสมเพื่อการทำงานที่รวดเร็วและถูกต้องมากขึ้น

ในเรื่องนี้สาเหตุของข้อผิดพลาดอาจอยู่ในโค้ดที่ไม่ดีซึ่งเขียนโดยนักพัฒนาบุคคลที่สาม นี่อาจเป็นคำขอ "จำนวนมาก" ที่จะบล็อกข้อมูลเป็นระยะเวลานาน นอกจากนี้ยังมีกรณีของการสร้างอัลกอริธึมที่มีประสิทธิภาพต่ำและมีการละเมิดตรรกะอยู่บ่อยครั้ง

มีความเป็นไปได้สูงที่ข้อขัดแย้งในการล็อคเกิดขึ้นอย่างแน่นอนเนื่องจากข้อผิดพลาดของนักพัฒนาหากเกิดขึ้นหลังจากการอัพเดตโปรแกรม หากต้องการตรวจสอบ คุณสามารถ "ย้อนกลับ" การปรับปรุงหรือปรับโครงสร้างโค้ดใหม่ได้

ล็อคใน 1C คืออะไร เหตุใดจึงต้องมี และวิธีหลีกเลี่ยงปัญหาเมื่อทำงานกับพวกมัน

หลายๆท่านอย่างแน่นอนเมื่อใช้ ระบบสารสนเทศ 1C Enterprise (1C 7.7, 1C 8.1, 1C 8.2, 1C 8.3) พบกับปรากฏการณ์ดังกล่าวเป็นการบล็อก ยิ่งไปกว่านั้น ตามกฎแล้ว ทุกคนเรียกปรากฏการณ์นี้แตกต่างกัน: “การบล็อก 1C”, “ข้อขัดแย้งในการบล็อก 1C”, “ข้อผิดพลาดในการบล็อก 1C”, “การบล็อกธุรกรรม 1C” และชื่ออื่น ๆ เรามาดูกันว่าล็อค (ไม่ใช่เดดล็อก) คืออะไร เหตุใดจึงต้องมี และวิธีหลีกเลี่ยงปัญหาเมื่อใช้งาน


ล็อคตัวเอง (รวมถึงใน 1C และระบบอื่น ๆ ) เป็นเครื่องมือที่มีประโยชน์ที่ให้ความสามารถในการทำงานกับทรัพยากรที่ใช้ร่วมกันอย่างต่อเนื่อง ตัวอย่างเช่น แนวคิดเรื่อง "ทรัพยากรที่ใช้ร่วมกัน" ล้อมรอบเราตลอดชีวิต เช่น ขณะที่คุณกำลังขับรถ ไม่มีใครสามารถขับรถได้ ดังนั้นรถยนต์จึงเป็นทรัพยากรที่ใช้ร่วมกัน และคนขับคนที่สองจะรอจนกว่าคุณจะมาถึง เช่น ภรรยา/สามีของคุณ คุณทั้งคู่แข่งขันกันเพื่อทรัพยากรร่วมกัน - รถยนต์ ใครจะขับรถเข้าไป. ช่วงเวลาปัจจุบันคุณกำหนดในระดับแนวความคิดว่าเราควรเป็นอย่างไร ระบบอัตโนมัติ- นี่คือเหตุผลที่เราเกิดเครื่องมือขึ้นมา การปิดกั้นซึ่งจัดเตรียมองค์กรสำหรับกระบวนการเข้าถึงทรัพยากรที่ใช้ร่วมกันและกำหนดคิว ตามกฎแล้วในชีวิตเช่นเดียวกับในระบบข้อมูล (1C 7.7, 1C 8.1, 1C 8.2, 1C 8.3) มีทรัพยากรที่ใช้ร่วมกันจำนวนมาก ดังนั้นจึงมีการบล็อกจำนวนมากเช่นกัน ตอนนี้อันที่สอง จุดสำคัญ– ภรรยา/สามีของคุณจะรอรถของคุณออกนานเท่าใด มีเหตุผลที่จะสรุปได้ว่ารถจะอยู่ได้ไม่นาน ดังนั้น การล็อกจึงมีขีดจำกัดการหมดเวลา - หรือที่รู้จักกันในชื่อการหมดเวลา การหมดเวลาคือเวลาสูงสุดที่ผู้เข้าร่วมแข่งขัน (ภรรยา/สามีของคุณ) รอให้ทรัพยากรที่แชร์ถูกปลดปล่อย จากนั้นเขาก็จะรอต่อไปเป็นระยะเวลาเท่าเดิมหรือเดิน ในระบบข้อมูล 1C การหมดอายุของการหมดเวลาจะลงท้ายด้วยข้อความ "ข้อขัดแย้งในการล็อค 1C", "ข้อผิดพลาดการล็อค 1C", "การล็อคธุรกรรม 1C", "การหมดเวลาเมื่อล็อค"

รายละเอียดที่สำคัญที่ควรจำไว้ก็คือการล็อค (โดยเฉพาะใน 1C) สามารถชัดเจน (ตั้งค่าโดยผู้ใช้) และโดยนัย (กำหนดโดยแพลตฟอร์ม SQL) ในบทความเรากำลังพูดถึงการล็อคที่ชัดเจน ดังนั้นจึงมักใช้ในการทำธุรกรรมเสมอ ดังนั้นปรากฎว่า "การบล็อก 1C" และ "การบล็อกธุรกรรม 1C" เป็นคำพ้องความหมาย

เราได้ตัดสินใจว่าหากเกินกำหนดเวลา ผู้ใช้จะได้รับข้อความแสดงข้อผิดพลาด สำหรับเขาแล้ว กระบวนการรอนั้นดูเหมือนว่าหน้าจอของระบบข้อมูล 1C จะค้าง โอกาสที่ข้อความหมดเวลาจะปรากฏขึ้น (ข้อผิดพลาดของผู้ใช้ 1C) ได้รับผลกระทบจากตัวบ่งชี้ต่อไปนี้:

  • 1C จำนวนมากล็อคในธุรกรรม
  • ระยะเวลาของการทำธุรกรรม

เพื่อลดข้อความที่เกี่ยวข้องกับข้อผิดพลาดในการล็อค จำเป็นต้องลดจำนวนการล็อค (เพิ่มประสิทธิภาพการเลือก) หรือลดระยะเวลาของการทำธุรกรรม
ตอนนี้เรามาพิจารณาว่าตัวบ่งชี้เหล่านี้สามารถมีอิทธิพลต่อระบบข้อมูล 1C จริงได้อย่างไร

เพื่อลดการบล็อกได้มาก:

ใน 1C: องค์กร 7.7:

ระบบสารสนเทศ 1C 7.7 สำหรับการล็อคจะใช้การล็อคแบบโต๊ะซึ่งทำให้การทำงานของผู้ใช้เป็นอัมพาต ตามกฎแล้ว ผู้คนมากกว่า 50 คนในฐานข้อมูลเดียวไม่สามารถทำงานได้โดยไม่มีข้อผิดพลาด และปัญหาอาจปรากฏในฐานข้อมูลของผู้ใช้ 20 คนด้วย
สารละลาย:

  • ล็อคแบบยืดหยุ่น 1C จากบริษัท Softpoint ด้วยความช่วยเหลือของพวกเขา คุณจะไม่เพียงเพิ่มประสิทธิภาพการล็อคจำนวนมาก (แทนที่การล็อคตารางด้วยการล็อคผู้ใช้) แต่ยังเพิ่มความเร็วในการเลือก การค้นหา และรายงานอีกด้วย
ใน 1C: องค์กร 8.x:
ระบบสารสนเทศ 1C 8.1., 1C 8.2., 1C 8.3. ในโหมดอัตโนมัติจะใช้การล็อคประเภทซ้ำซ้อน (REPEATABLEREAD, SERIALIZABLE) ส่งผลให้ประสบการณ์ผู้ใช้ลดลงถึง 100 คนขึ้นไป
สารละลาย:
  • ล็อคที่มีการจัดการ 1C - เครื่องมือในตัวของแพลตฟอร์ม 1C สำหรับการกำหนดค่าล็อคที่เลือกได้มากขึ้น หากต้องการใช้งานโปรแกรมเมอร์จะต้องเขียนตัวดำเนินการพิเศษในตำแหน่งที่ถูกต้องในโค้ดเพื่อบล็อกตัวดำเนินการที่จำเป็น ( ในความเห็นของเขา!) บันทึกในตารางระบบสารสนเทศ
  • ล็อคแบบยืดหยุ่น 1C - เทคโนโลยี Softpoint สำหรับการเปลี่ยนล็อคมาตรฐานด้วยล็อคแบบกำหนดเอง

เพื่อลดเวลาการทำธุรกรรม:

สำหรับระบบข้อมูล 1C ใด ๆ (1C 7.7., 1C 8.1, 1C 8.2, 1C 8.3) สำหรับระบบข้อมูลอื่น ๆ จะใช้วิธีการที่คล้ายกัน:

    ตรวจสอบและ การตั้งค่าที่ถูกต้องการบำรุงรักษาฐานข้อมูลตามปกติ (การบำรุงรักษาไฟล์ ดัชนี สถิติ ฐานข้อมูลตารางชั่วคราว การตั้งค่า Windows และ SQLServer)

    การวิเคราะห์และการเพิ่มประสิทธิภาพของแบบสอบถาม 1C และ SQL จำนวนมาก (การปรับดัชนี การเขียนแบบสอบถามใหม่)

    การตรวจสอบความซ้ำซ้อนของธุรกรรม ในหลายกรณี การดำเนินการถูกรวมไว้ในธุรกรรมอย่างไม่สมเหตุสมผลโดยไม่ทราบว่าสิ่งนี้จะส่งผลต่อระยะเวลาอย่างไร และส่งผลต่อประสิทธิภาพด้วย

  1. หากคุณต้องการจัดการกับปัญหาประสิทธิภาพทางเทคนิคของ 1C (1C 7.7, 1C 8.1, 1C 8.2, 1C 8.3) และระบบข้อมูลอื่น ๆ อย่างอิสระ จากนั้นสำหรับคุณ จะมีรายการบทความทางเทคนิคที่ไม่ซ้ำใครใน Almanac ของเรา (การบล็อกและการหยุดชะงัก ภาระงานหนักบน CPU และดิสก์ การบำรุงรักษาฐานข้อมูล และการปรับดัชนีเป็นเพียงส่วนเล็กๆ ของเนื้อหาทางเทคนิคที่คุณจะพบในนั้น)
  2. หากคุณต้องการหารือเกี่ยวกับปัญหาด้านประสิทธิภาพกับผู้เชี่ยวชาญของเรา หรือสั่งซื้อโซลูชันการตรวจสอบประสิทธิภาพ PerfExpertจากนั้นฝากคำขอไว้แล้วเราจะติดต่อคุณโดยเร็วที่สุด

สวัสดีทุกคน!

เมื่อวันก่อนในที่ทำงาน ฉันพบปัญหาในการล็อค กล่าวคือ ข้อความ “มีข้อขัดแย้งในการล็อคขณะดำเนินการธุรกรรม เกินเวลารอสูงสุดในการให้การล็อค”

แน่นอนว่าไม่มีปัญหาการหยุดชะงักที่นี่ เพียงบางเซสชันล็อคไว้และ "ลืม" เพื่อลบออก ในขณะเดียวกันปัญหาก็คุกคามด้วยผลกระทบร้ายแรง - ไม่ได้ดำเนินการเอกสารการขายสินค้าและบริการ มีคนทำงานในฐานข้อมูลครั้งละประมาณ 100 คน และเป็นไปไม่ได้ที่จะดำเนินการตามปกติและบ่อยครั้ง!

มีวิธีแก้ไขสองวิธี - รีบูทเซิร์ฟเวอร์หรือค้นหาเซสชันที่ล้มเหลว วิธีแก้ปัญหาแรกนั้นง่ายและรวดเร็ว แต่ตามที่มีคนเขียนไว้ที่นี่ คุณสามารถรีบูตเซิร์ฟเวอร์ได้จนกว่าคุณจะถูกไล่ออก ฉันตัดสินใจใช้เส้นทางที่สอง

วันแรก - ปัญหาปรากฏขึ้นในระหว่างวัน ในตอนแรกดูเหมือนว่าปัญหาจะเกิดขึ้นกับผู้ใช้ระยะไกลที่เข้าสู่ระบบ Configurator ดูเหมือนว่าการประหารชีวิตจะหยุดลง ณ จุดหนึ่ง และแน่นอนว่าการบล็อกไม่ได้ถูกลบออก หลังจากผ่านไปสองสามชั่วโมง เราก็สามารถปล่อยตัวกำหนดค่าได้ แต่ปัญหาก็ไม่หายไป มันไม่พึงปรารถนาอย่างยิ่งที่จะบังคับให้ฆ่าผู้ปรับแต่ง บางทีพวกเขาอาจจะกำลังทำงานอยู่ในนั้น หลังจากนั้น Google ก็เข้ามามีบทบาท ฉันพบบทความในไซต์นี้ที่กล่าวถึงวิธีค้นหาการล็อกใน MS SQL DBMS เมื่อตรวจสอบแล้ว ไม่มีการล็อกที่ระดับ DBMS แปลก. ต่อไปมีความพยายามที่จะตั้งค่าเทคโนโลยี นิตยสาร. จัดให้แล้วไงต่อ? ใน 15 นาที บันทึกได้สองสามกิ๊ก! จะอ่านได้อย่างไรจะมองหาอะไร? ไม่ทราบ

ฉันพบบทความเกี่ยวกับวิธีดูสิ่งที่ถูกบล็อกโดยใช้ SQL Trace แม้ว่าฉันจะพบมันแล้วจะทำอย่างไรต่อไป? ฉันต้องการเซสชั่น!

เมื่อใกล้ถึง 16:00 น. เมื่อฉันรู้ว่าฉันรอไม่ไหวแล้ว ฉันจึงทำการรีบูต หวังว่าสิ่งนี้จะไม่เกิดขึ้นอีก (และนี่เป็นครั้งแรกในรอบหกเดือนของการทำงาน) ฉันถอนหายใจด้วยความโล่งอก ทุกอย่างได้ผล แต่เปล่าประโยชน์... วันที่สอง - สถานการณ์เดียวกัน ฉันขุดค้น Google เป็นเวลาหนึ่งชั่วโมงครึ่งและพยายามอย่างไม่อาจเข้าใจได้อีกครั้ง ไม่มีผลลัพธ์ รีบูต ในตอนท้ายของวันมันก็เกิดขึ้นอีกครั้ง ฉันคิดว่ามันเยี่ยมมาก ฉันจะกลับบ้านอย่างใจเย็น นั่งขุดลึกลงไป ฉันกลับบ้าน ทุกอย่างเรียบร้อยดี เศร้า.

ในวันที่สาม ฉันดูการสัมมนาผ่านเว็บ พวกเขาพูดคุยเกี่ยวกับสิ่งที่น่าสนใจและ วิธีที่มีประสิทธิภาพกำลังมองหาปัญหา ฉันจำได้ แต่ปัญหาก็ไม่เกิดขึ้นอีก ผ่านไปหนึ่งสัปดาห์ และนี่ก็คือ - ล็อคดาวน์อีกครั้ง! ฉันถูมือและเริ่มแสดง

ขั้นแรก ให้จัดทำบันทึกประจำวัน ใช่ ฉันทำไม่ได้ถ้าไม่มีมัน แต่ตอนนี้ฉันรู้วิธีอ่านมันแล้ว เรากำหนดไว้สองเหตุการณ์: เหตุการณ์แรกคือ TLOCK และเหตุการณ์ที่สองคือ TTIMEOUT รายการแรกแสดงเหตุการณ์การบล็อกทั้งหมด ส่วนรายการที่สองแสดงเหตุการณ์การบล็อกที่ไม่สามารถติดตั้งได้ภายในเวลาที่กำหนด อันที่จริงแล้ว แค่ TTIMEOUT ก็เพียงพอแล้ว



















เราคัดลอกไฟล์บันทึกทางเทคนิคไปยังสถานที่ที่กำหนด บินเข้าสู่โปรแกรม เรียกล็อค รับข้อความ และลบหรือเปลี่ยนชื่อไฟล์บันทึกทางเทคนิค เราไม่ต้องการข้อมูลมากมายเกี่ยวกับการบล็อกอื่นๆ!

ไปที่โฟลเดอร์ rphost_PID ค้นหาไฟล์ข้อความและค้นหาคำว่า TTIMEOUT เราเห็นบรรทัด:

53:16.789126-0,TTIMEOUT,5,กระบวนการ=rphost,p:processName=*****,t:clientID=16536,t:applicationName=1CV8,t:computerName=ASUSM,t:connectID=17272,SessionID= 2242,Usr=*********,รอการเชื่อมต่อ=8239

อย่างไรก็ตาม อาจมีโฟลเดอร์ rphost_PID ได้หลายโฟลเดอร์ ทุกอย่างขึ้นอยู่กับจำนวนกระบวนการของผู้ปฏิบัติงานที่ทำงานบนเซิร์ฟเวอร์

จากนั้นทุกอย่างก็เรียบง่าย: ดูที่ท้ายบรรทัด - WaitConnections = 8239 นี่คือหมายเลขการเชื่อมต่อของเรา ไปที่คอนโซลเซิร์ฟเวอร์ไปที่การเชื่อมต่อค้นหาหมายเลขนี้และดูหมายเลขเซสชัน ในกรณีของฉัน มีสองเซสชันต่อผู้ใช้ - เซสชันที่ล้มเหลวและเซสชันอื่น เซสชันที่วารสารทางเทคนิคชี้ไปขัดข้อง และดูเถิด! ทุกอย่างได้ผล ความสุขไม่มีขอบเขต! แต่เมื่อปรากฏในภายหลัง เซสชันไม่ได้หยุดนิ่ง :) พวกเขากำลังทำงานอยู่ในนั้น ดังนั้นในอนาคตจึงแนะนำให้ติดต่อผู้ใช้และตักเตือน

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

เมื่อผู้ใช้หลายร้อยคนทำงานกับโปรแกรมและข้อมูลพร้อมกัน ปัญหาก็เกิดขึ้นซึ่งเป็นลักษณะเฉพาะของโซลูชันขนาดใหญ่เท่านั้น เรากำลังพูดถึงปัญหาที่เกิดจากการบล็อกข้อมูล

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

ปัญหาที่เกิดจากการบล็อคไม่มี วิธีแก้ปัญหาทั่วไป- ดังนั้นเราจะพยายามวิเคราะห์สาเหตุของปัญหาดังกล่าวและจัดระบบทางเลือกในการแก้ไขปัญหาเหล่านั้น

เหตุผลในการบล็อกธุรกรรม

ก่อนอื่นมาจำกันก่อนว่าล็อคคืออะไรและในขณะเดียวกันก็พิจารณาว่าจำเป็นหรือไม่ เรามาดูตัวอย่างคลาสสิกของการอุดตันที่เราพบในชีวิตกันดีกว่า

ตัวอย่างที่ 1: การซื้อตั๋วเครื่องบินหรือรถไฟ สมมติว่าเราแสดงความปรารถนาของเราต่อแคชเชียร์ แคชเชียร์แจ้งที่นั่งว่างให้เราทราบ ซึ่งเราจะสามารถเลือกที่นั่งที่เราชอบที่สุดได้ (แน่นอนว่ามีหลายที่นั่ง) แม้ว่าเราจะเลือกและยืนยันข้อตกลงกับตัวเลือกที่เสนอ ที่นั่งเหล่านี้จะไม่สามารถขายให้กับบุคคลอื่นได้ กล่าวคือ ถูก “บล็อค” ชั่วคราว หากไม่ถูกบล็อก เมื่อถึงเวลายืนยัน อาจมีสถานการณ์ที่ตั๋วที่เราเลือกถูกขายไปแล้ว และในกรณีนี้รอบการคัดเลือกอาจมีจำนวนซ้ำที่ไม่สามารถคาดเดาได้ ระหว่างเลือกสถานที่ก็ขายไปแล้ว!.. ขณะที่เราเลือกที่อื่นก็ไม่มีแล้ว...

ตัวอย่างที่ 2: การซื้อของในร้านค้าหรือที่ตลาดสด เราเดินไปที่เคาน์เตอร์และเลือกแอปเปิ้ลที่สวยที่สุดจากที่มีอยู่นับร้อย พวกเขาเลือกมันและล้วงเข้าไปในกระเป๋าเพื่อเงิน จะเป็นอย่างไรหากในขณะนั้นเรากำลังนับเงินแอปเปิ้ลที่เราเลือกไว้จะถูกขายให้กับผู้ซื้อที่เข้ามาช้ากว่าเรา?

ดังนั้นการปิดกั้นตัวเองจึงเป็นปรากฏการณ์ที่จำเป็นและมีประโยชน์ ต้องขอบคุณการบล็อกที่เรารับประกันว่าการดำเนินการจะเสร็จสิ้นในขั้นตอนเดียว และบ่อยครั้งที่การดำเนินการที่นำไปสู่ผลเชิงลบไม่ใช่การดำเนินการที่ประสบความสำเร็จมากที่สุด ซอฟต์แวร์เมื่อใด เช่น:

  • วัตถุจำนวนมากเกินไป (ตั๋ว, แอปเปิ้ล) ถูกบล็อก
  • เวลาในการบล็อกถูกขยายออกไปอย่างไม่สมเหตุสมผล

การบล็อกมากเกินไปในการกำหนดค่า 1C ทั่วไป

บน โครงการสำคัญตามกฎแล้ว เราใช้ 1C:Enterprise นั่นเป็นเหตุผล คำแนะนำการปฏิบัติเราจะพยายามอธิบายวิธีแก้ไขปัญหาการบล็อกโดยใช้ตัวอย่างของชุดค่าผสม 1C:Enterprise + MS-SQL

1C:Enterprise รุ่นที่ 8 มอบการใช้งานแบบขนานที่ดีมาก สามารถทำงานพร้อมกันกับการกำหนดค่าเดียว (นั่นคือ บนฐานเดียว) กับเซิร์ฟเวอร์และช่องทางการสื่อสารปกติ จำนวนมากผู้ใช้ ตัวอย่างเช่น เจ้าของร้านหลายร้อยคนดำเนินการออกหรือรับสินค้า นักเศรษฐศาสตร์คำนวณค่าแรงสำหรับแผนกต่างๆ ไปพร้อมๆ กัน นักบัญชีดำเนินการคำนวณและจ่ายเงินเดือน ฯลฯ

แต่มีเหตุผลว่าทำไมจึงมีความคิดเห็นที่ตรงกันข้าม - ตำนานที่ว่าด้วยการใช้งานพร้อมกันอย่างเข้มข้นการทำงานกับโซลูชันที่ใช้ 1C:Enterprise นั้นอึดอัดหรือเป็นไปไม่ได้ ท้ายที่สุดทันทีที่ผู้ใช้หลายร้อยคนเริ่มใช้โซลูชันมาตรฐานสำหรับ 1C:Enterprise ระดับอุตสาหกรรมบ่อยครั้งที่หน้าต่างปรากฏขึ้นบนหน้าจอพร้อมคำจารึกที่น่าภาคภูมิใจ:“ ข้อผิดพลาดเมื่อเรียกวิธีการตามบริบท (เขียน): การล็อคข้อขัดแย้งเมื่อดำเนินธุรกรรม: …” จากนั้นขึ้นอยู่กับประเภทของเซิร์ฟเวอร์ SQL ที่ใช้ บางอย่างเช่น "Microsoft OLE DB Provider สำหรับ SQL Server: เกินระยะเวลาการร้องขอการล็อก -

โซลูชันมาตรฐานเกือบทั้งหมดในการใช้งานแบบสำเร็จรูปที่เสนอได้รับการกำหนดค่าสำหรับการจัดการล็อคอัตโนมัติ “อัตโนมัติ” ในที่นี้อาจถูกมองว่าเป็น “หวาดระแวง” ในกรณีที่เมื่อประมวลผลเอกสารใด ๆ เราจะบล็อกทุกสิ่งที่อาจเชื่อมโยงกับเอกสารนั้น ปรากฎว่าเมื่อผู้ใช้คนหนึ่งทำอะไรบางอย่าง (และบางครั้งก็แค่เขียนลงไป) ส่วนที่เหลือก็ได้แต่รอเท่านั้น

ฉันจะแสดงความคิดเห็นว่าทำไม 1C ตัดสินใจไม่กำหนดค่าโซลูชันมาตรฐานสำหรับการใช้งานแบบขนานในระดับสูง ต้นทุนค่าแรงสำหรับการปรับเปลี่ยนดังกล่าวไม่สูง - หลาย "เดือนคน" ซึ่งไม่สำคัญในระดับ 1C สำหรับฉันดูเหมือนว่าเหตุผลจะแตกต่างออกไป

ประการแรกการปรับเปลี่ยนดังกล่าวทำให้การประมวลผลเอกสารทั้งหมดมีความซับซ้อนอย่างมาก ซึ่งหมายความว่าสำหรับผู้บริโภคที่ใช้ 1C สำหรับงานเล็ก ๆ จะมีเพียงข้อเสียเปรียบโดยไม่ได้รับผลประโยชน์ใด ๆ - ความยากในการปรับเปลี่ยนการกำหนดค่ามาตรฐานจะซับซ้อนมากขึ้น สถิติในเวลาเดียวกันแนะนำว่าลูกค้าประเภทใดที่เป็นช่องทางการให้อาหารหลักสำหรับ 1C...

เหตุผลที่สองฝังอยู่ในการตั้งค่าพื้นฐานทั่วไปของเซิร์ฟเวอร์ SQL เช่น MS-SQL ซึ่งยังคงใช้บ่อยกว่าผู้อื่น มันเกิดขึ้นโดยที่ลำดับความสำคัญในการตั้งค่านั้นมอบให้กับการบันทึก แรมเซิร์ฟเวอร์แทนที่จะลดการบล็อก สิ่งนี้นำไปสู่ความจริงที่ว่าหากจำเป็นต้องล็อคหลายแถวเซิร์ฟเวอร์ SQL จะทำการตัดสินใจ "ประหยัดหน่วยความจำและโปรเซสเซอร์" - เพื่อล็อคทั้งตารางในคราวเดียว!..

เหล่านี้คือข้อบกพร่อง โซลูชั่นมาตรฐานหรือข้อมูลเฉพาะของการตั้งค่าเซิร์ฟเวอร์ฐานข้อมูลที่ใช้มักระบุถึงปัญหาที่เกิดจากการล็อค เป็นผลให้ข้อบกพร่องทางเทคนิคนำไปสู่ความสำคัญมาก ปัญหาองค์กร- ท้ายที่สุดแล้ว หากพนักงานได้รับเหตุผลให้ถูกรบกวนจากงานหรือให้เหตุผลว่าทำไมงานถึงไม่สำเร็จ คนกลุ่มน้อยก็จะทำงานได้อย่างมีประสิทธิภาพ ข้อความเกี่ยวกับการบล็อกธุรกรรมหรือโปรแกรม "เบรก" นั้นเป็นเหตุผลในอุดมคติว่าทำไมบางสิ่งถึงไม่สามารถทำได้

คำแนะนำสำหรับการกำจัดการบล็อกที่มากเกินไปสำหรับ 1C: ENTERPRISE

จะทำอย่างไรถ้าการแก้ปัญหาการล็อคมากเกินไปเป็นเรื่องสำคัญ?

ในขั้นตอนสุดท้ายของการดำเนินการทั้งหมด คอมเพล็กซ์ขนาดใหญ่จำเป็นต้องดำเนินการปรับแต่งอย่างละเอียดเพื่อกำจัดการบล็อกธุรกรรมที่ไม่จำเป็น เป็นสิ่งสำคัญในการแก้ไขปัญหาที่อาจเกิดขึ้นเนื่องจากเงื่อนไขการบล็อกหรือเทคนิคการใช้งานที่พัฒนาไม่เพียงพอ

เพราะ การดำเนินการนี้มีความสำคัญอย่างยิ่งและต้องทำอย่างต่อเนื่อง ดังนั้น เพื่อให้การปรับเปลี่ยนดังกล่าวง่ายขึ้น เราได้จัดทำคำแนะนำพื้นฐานจำนวนหนึ่งที่เราพยายามปฏิบัติตาม คำแนะนำที่ได้รับและทดสอบผ่านประสบการณ์การใช้งานขนาดใหญ่จำนวนมาก

  1. หาก DBMS หรือระบบการพัฒนาที่คุณใช้ (เช่น 1C:Enterprise) ใช้โหมดการล็อคข้อมูลอัตโนมัติตามค่าเริ่มต้น ให้ปฏิเสธการจัดการการล็อคอัตโนมัติ กำหนดค่ากฎการบล็อกด้วยตนเอง อธิบายเกณฑ์ในการบล็อกทั้งตารางหรือแต่ละแถว
  2. เมื่อพัฒนาโปรแกรม ทุกครั้งที่เป็นไปได้ ให้เข้าถึงตารางในลำดับเดียวกัน
  3. พยายามอย่าเขียนลงในตารางเดียวกันหลายครั้งภายในธุรกรรมเดียวกัน หากเป็นเรื่องยาก อย่างน้อยก็ลดช่วงเวลาระหว่างการดำเนินการเขียนครั้งแรกและครั้งสุดท้ายให้เหลือน้อยที่สุด
  4. วิเคราะห์ความเป็นไปได้ของการปิดใช้งานการเลื่อนระดับการล็อกในระดับเซิร์ฟเวอร์ SQL
  5. แจ้งให้ผู้ใช้ทราบอย่างชัดเจนถึงสาเหตุที่ไม่สามารถดำเนินการใดๆ ได้หากเกิดจากการบล็อก ให้คำแนะนำที่เข้าถึงได้และเข้าใจได้เกี่ยวกับสิ่งที่ต้องทำต่อไป

หากคุณดูคำแนะนำอย่างละเอียดก็จะชัดเจนว่า การทดสอบดังกล่าวมีความเหมาะสมไม่เพียงแต่สำหรับ 1C:Enterprise เท่านั้น แต่ยังสำหรับระบบอื่นๆ ด้วย- ไม่สำคัญเลยว่าพวกเขาเขียนด้วยภาษาใดและทำงานกับเซิร์ฟเวอร์ฐานข้อมูลใด คำแนะนำส่วนใหญ่มีลักษณะเป็นสากล ดังนั้นจึงใช้ได้เท่าเทียมกันเมื่อใช้ 1C:Enterprise และสำหรับโปรแกรม "ที่เขียนเองที่บ้าน" หรือระบบ ERP "ชนิดบรรจุกล่อง" อื่นๆ

ป.ล. คุณรู้ไหมว่าเราให้ความช่วยเหลืออย่างมืออาชีพในการอัปเดตซอฟต์แวร์ 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 หลังจากดำเนินการดังกล่าว จำเป็นต้องค้นหาช่องโหว่ในระบบ เพิ่มประสิทธิภาพการกำหนดค่าหรือการทำงานของพนักงาน ไม่แนะนำให้ใช้มาตรการดังกล่าวอย่างต่อเนื่องในกรณีที่มีข้อขัดแย้งในการล็อคธุรกรรมเป็นประจำ




สูงสุด