การมีธุรกรรมแบบเปิดด้วยตัวเองจะแทบไม่มีผล แบบง่าย ๆ
BEGIN TRANSACTION
-- wait for a while, doing nothing
-- wait a bit longer
COMMIT
จะเลวร้ายที่สุดค้างไว้สองสามไบต์ของค่าสถานะ ไม่ใช่เรื่องใหญ่.
โปรแกรมส่วนใหญ่จะทำงานจริงภายในธุรกรรมและนี่เป็นอีกเรื่องหนึ่ง จุดของการทำธุรกรรมคือเพื่อให้คุณมั่นใจได้ว่าข้อเท็จจริงหลายประการในฐานข้อมูลเป็นจริงพร้อมกันแม้ว่าจะมีผู้ใช้รายอื่นเขียนไปยังฐานข้อมูลเดียวกันพร้อมกัน
ใช้ตัวอย่างของการโอนเงินระหว่างบัญชีธนาคาร ระบบต้องตรวจสอบให้แน่ใจว่าบัญชีแหล่งที่มามีอยู่มีเงินเพียงพอมีบัญชีปลายทางอยู่และเกิดขึ้นทั้งการตัดบัญชีและเครดิตหรือไม่เกิดขึ้น จะต้องรับประกันสิ่งนี้ในขณะที่การทำธุรกรรมอื่น ๆ เกิดขึ้นบางทีระหว่างบัญชีทั้งสองนี้ ระบบจะช่วยให้มั่นใจได้ด้วยการล็อคในตารางที่เกี่ยวข้อง ล็อคสิ่งที่จะได้รับการและวิธีการทำงานของคนอื่น ๆ ที่คุณเห็นจะถูกควบคุมโดยการทำธุรกรรมระดับแยก
ดังนั้นหากคุณทำงานมากมีโอกาสที่ดีในการทำธุรกรรมอื่น ๆ จะถูกจัดคิวรอวัตถุที่คุณถือล็อค สิ่งนี้จะลดปริมาณงานโดยรวมของระบบ ในที่สุดพวกเขาจะถึงขีด จำกัด การหมดเวลาและล้มเหลวซึ่งเป็นปัญหาสำหรับการทำงานของระบบโดยรวม หากคุณใช้ระดับการแยกในแง่ดีการทำธุรกรรมของคุณอาจล้มเหลวเมื่อคุณลองทำคอมมิชชันเนื่องจากการทำงานของคนอื่น
การล็อกโฮลดิ้งใช้ทรัพยากรระบบ นี่คือหน่วยความจำที่ระบบไม่สามารถใช้ในการประมวลผลคำขออื่น ๆ ลดปริมาณงาน
ถ้าเป็นจำนวนมากของการทำงานได้รับการดำเนินการระบบอาจเลือกที่จะดำเนินการเพิ่มล็อค แทนที่จะล็อคแต่ละแถวตารางทั้งหมดจะถูกล็อค จากนั้นผู้ใช้จะได้รับผลกระทบมากขึ้นพร้อมกันปริมาณงานของระบบจะลดลงอีกและผลกระทบของแอปพลิเคชันจะยิ่งใหญ่ขึ้น
การเปลี่ยนแปลงข้อมูลจะถูกเขียนไปยังล็อกไฟล์เช่นเดียวกับล็อคที่ปกป้องพวกเขา สิ่งเหล่านี้ไม่สามารถล้างออกจากบันทึกได้จนกว่าการทำธุรกรรมจะเกิดขึ้น ดังนั้นการทำธุรกรรมที่ยาวมากอาจทำให้ไฟล์บันทึกขยายตัวพร้อมกับปัญหาที่เกี่ยวข้อง
หากงานปัจจุบันใช้ tempdb ซึ่งมีแนวโน้มสำหรับปริมาณงานขนาดใหญ่ทรัพยากรที่มีอาจถูกผูกไว้จนกว่าจะสิ้นสุดการทำธุรกรรม ในกรณีที่รุนแรงนี้อาจทำให้งานอื่น ๆ ล้มเหลวเพราะไม่มีที่ว่างเพียงพอสำหรับพวกเขา ฉันมีกรณีที่ UPDATE ที่เขียนรหัสไม่ดีเต็ม tempdb ดังนั้นจึงมีดิสก์ไม่เพียงพอสำหรับ SORT ของรายงานและรายงานล้มเหลว
หากคุณเลือกที่จะย้อนกลับการทำธุรกรรมหรือระบบล้มเหลวและกู้คืนเวลาที่ระบบใช้งานได้อีกครั้งจะขึ้นอยู่กับจำนวนงานที่ทำ เพียงเปิดธุรกรรมจะไม่มีผลกับเวลาการกู้คืน แต่เป็นงานที่ทำไปมากน้อยเพียงใด หากธุรกรรมถูกเปิด แต่ไม่ได้ใช้งานสำหรับการกู้คืนหนึ่งชั่วโมงจะเกือบจะทันที ถ้ามันถูกเขียนอย่างต่อเนื่องในชั่วโมงนั้นกฎของหัวแม่มือก็คือเวลาการกู้คืนก็จะอยู่ที่ประมาณหนึ่งชั่วโมง
ในขณะที่คุณเห็นการทำธุรกรรมที่ยาวนานอาจเป็นปัญหาได้ สำหรับแนวทางปฏิบัติที่ดีที่สุดของระบบ OLTP คือการมีธุรกรรมฐานข้อมูลหนึ่งรายการต่อธุรกรรมทางธุรกิจ สำหรับอินพุตกระบวนการทำงานแบตช์ในบล็อกที่มีการคอมมิตบ่อยและรีสตาร์ทลอจิกรหัส โดยทั่วไปหลายพันเร็กคอร์ดสามารถประมวลผลภายในธุรกรรม DB เดียว แต่ควรทดสอบนี้สำหรับการใช้งานพร้อมกันและ resoruce ปริมาณการใช้
อย่าถูกล่อลวงให้ไปที่สุดขั้วอื่น ๆ และหลีกเลี่ยงการทำธุรกรรมและล็อคอย่างสิ้นเชิง หากคุณต้องการรักษาความสอดคล้องภายในข้อมูลของคุณ (และทำไมคุณต้องใช้ฐานข้อมูล?) ระดับการแยกและธุรกรรมมีวัตถุประสงค์ที่สำคัญมาก เรียนรู้เกี่ยวกับตัวเลือกของคุณและตัดสินใจว่าสมดุลของการเกิดพร้อมกันและความถูกต้องที่คุณพร้อมที่จะอยู่ด้วยสำหรับแต่ละส่วนของใบสมัครของคุณ