คำถามติดแท็ก locking

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

1
MySQL: ธุรกรรมจะล็อกแถวหรือไม่
ฉันไม่เคยลองใช้ธุรกรรม MySQL มาก่อนฉันแค่ต้องการชี้แจงบางอย่าง หากผู้ใช้สองคนเรียกใช้แบบสอบถามในเวลาที่แน่นอน MySQL จะจัดการเรื่องนี้อย่างไร เช่นผู้ใช้พยายามอัปเดตบันทึก user1: อัปเดตชุดตารางคอลัมน์ = คอลัมน์ - 4 โดยที่ column_id = 1; user2: อัปเดตชุดคอลัมน์ตาราง = คอลัมน์ - 7 โดยที่ column_id = 1; ตอนนี้ถ้าฉันใช้ทรานแซกชัน MySQL จะเลือกแบบสอบถามที่จะถูกดำเนินการก่อนและล็อกผู้ใช้รายที่สองจนกว่าจะมีการสืบค้นครั้งแรก จะเป็นล็อคตารางหรือล็อคแถวหรือไม่? จะเป็นอย่างไรถ้าผู้ใช้รายที่สามออกคำสั่ง select? MySQL จะคืนค่าอะไร? ป.ล. นี้จะอยู่ที่ Innodb

5
ดูการล็อกที่ได้รับระหว่างการดำเนินการสืบค้น (SQL Server)
แผนการดำเนินการแบบสอบถามจะไม่แสดงรายละเอียดการล็อกตามค่าเริ่มต้นเป็นไปได้หรือไม่ที่จะดูการล็อกพร้อมกับชนิดที่ได้มาระหว่างการดำเนินการค้นหา

3
การติดตามการดีบักและการแก้ไขข้อขัดแย้งของ Row Lock
ดึกฉันได้รับการโต้เถียงกันมากเกี่ยวกับการล็อกแถว ดูเหมือนว่าตารางในการช่วงชิงจะเป็นตารางเฉพาะ นี่คือสิ่งที่เกิดขึ้นโดยทั่วไป - นักพัฒนา 1 เริ่มทำธุรกรรมจากหน้าจอส่วนหน้าของ Oracle Forms นักพัฒนา 2 เริ่มทำธุรกรรมอื่นจากเซสชันที่ต่างกันโดยใช้หน้าจอเดียวกัน ~ 5 นาทีในส่วนหน้าดูเหมือนว่าไม่ตอบสนอง การตรวจสอบเซสชันแสดงการช่วงชิงล็อกแถว "ทางออก" ที่ทุกคนขว้างไปรอบ ๆ คือฆ่าช่วง: / เป็นผู้พัฒนาฐานข้อมูล สิ่งใดที่สามารถทำได้เพื่อกำจัดข้อขัดแย้งในการล็อกแถว เป็นไปได้ไหมที่จะพบว่าบรรทัดของโพรซีเดอร์ที่เก็บไว้ก่อให้เกิดข้อขัดแย้งในการล็อกแถวเหล่านี้หรือไม่ อะไรคือแนวทางทั่วไปในการลด / หลีกเลี่ยง / กำจัดปัญหาดังกล่าวซึ่งเป็นรหัส? หากคำถามนี้รู้สึกว่าข้อมูลปลายเปิด / ไม่เพียงพอโปรดแก้ไข / แจ้งให้เราทราบ - ฉันจะพยายามอย่างดีที่สุดเพื่อเพิ่มข้อมูลเพิ่มเติม ตารางที่มีปัญหาอยู่ในส่วนแทรกและอัปเดตจำนวนมากฉันขอบอกว่าเป็นหนึ่งในตารางที่ยุ่งที่สุด SP ค่อนข้างซับซ้อน - เพื่อทำให้ง่ายขึ้น - มันดึงข้อมูลจากตารางต่าง ๆ ใส่เข้าไปในตารางงานการดำเนินการทางคณิตศาสตร์จำนวนมากเกิดขึ้นบนโต๊ะทำงานและผลลัพธ์ของตารางงานถูกแทรก / อัปเดตลงในตารางที่เป็นปัญหา เวอร์ชันฐานข้อมูลคือ Oracle Database …

1
ฉันควรตีความ "ล็อคเวลา" ในบันทึกแบบสอบถามช้า mysql ได้อย่างไร
ฉันพยายามที่จะเข้าใจวิธีการตีความเวลาล็อคที่ดีที่สุดสำหรับการค้นหาที่ปรากฏในบันทึกการสืบค้นช้า MySQL ของเรา เช่นถ้าแบบสอบถาม UPDATE มีเวลาล็อค 10 วินาที ฉันคิดว่ามันเป็นเวลารวมหลังจากแบบสอบถามการอัพเดทเพื่อรับล็อค แม้ว่ากำลังรอให้คิวรีแบบเลือกก่อนหน้านี้เสร็จสมบูรณ์ แต่ไม่ได้ดำเนินการกับการกระทำ UPDATE ตัวเองนาฬิกาควรจะถูกทำเครื่องหมายเนื่องจากมันกำลังล็อคคิวรี SELECT ทั้งหมดที่เรียงกันหลังจากคิวรี UPDATE และวิธีการเกี่ยวกับการเลือกแบบสอบถามล็อค ทำไมแบบสอบถามที่เลือกบางรายการจึงมีเวลาล็อค เป็นเพราะมีคิวรี่ UPDATE ติดตามดังนั้นพวกเขาจะล็อคตารางด้วยกัน
12 mysql  locking 

1
จะเกิดอะไรขึ้นเมื่อเราเพิ่มดัชนีไปยังตารางที่มีอยู่ด้วยข้อมูลจำนวนมาก
ฉันมีตารางซึ่งจะมีประมาณ ~ 15 ล้านระเบียน ตอนนี้ฉันต้องเพิ่มดัชนีในตาราง การเพิ่มดัชนีจะใช้เวลาในการอัปเดตทุกรายการในตาราง ฉันค่อนข้างสับสนว่าการเพิ่มดัชนีจะทำให้ระบบหยุดทำงานหรือไม่ ถ้าใช่ฉันจะเอาชนะการหยุดทำงานได้อย่างไร

2
เหตุผลที่ดีในการใช้ SELECT ... ด้วย XLOCK
ฉันกำลังเผชิญหน้ากับการหยุดชะงักที่เกิดขึ้นอีกครั้งหนึ่งในนั้นคือ Keylock และมีการสืบค้น SELECT พร้อมคำใบ้ XLOCK ที่กลายเป็นเหยื่อการหยุดชะงัก คำสั่งอื่น ๆ คือการแทรกลงในหนึ่งในตารางที่เป็นส่วนหนึ่งของมุมมองของแบบสอบถามแรก ดู: create view dbo.viewE as select * from dbo.E where myValue > 13000 เลือกคำค้นหา: select * from dbo.viewE with (XLOCK) where A > GETUTCDATE() คำสั่ง INSERT: INSERT INTO [dbo].[E] (myValue,A) VALUES (10,GetDate()) ตารางต้นแบบ dbo.E มีพื้นที่ประมาณ 3 ล้านแถวในประมาณ 20 คอลัมน์บางส่วนเป็น ntext …

1
ล็อคใน Postgres สำหรับชุด UPDATE / INSERT
ฉันมีสองตาราง หนึ่งคือตารางบันทึก; อีกอันประกอบด้วยรหัสคูปองที่สามารถใช้ได้ครั้งเดียวเท่านั้น ผู้ใช้ต้องสามารถแลกคูปองซึ่งจะแทรกแถวลงในตารางบันทึกและทำเครื่องหมายคูปองที่ใช้ (โดยอัปเดตusedคอลัมน์เป็นtrue) โดยธรรมชาติมีปัญหาสภาพการแข่งขัน / ความปลอดภัยที่เห็นได้ชัดที่นี่ ฉันเคยทำสิ่งที่คล้ายกันในอดีตในโลกของ mySQL ในโลกนั้นฉันจะล็อกทั้งสองตารางทั่วโลกทำตรรกะให้ปลอดภัยด้วยความรู้ที่ว่าสิ่งนี้จะเกิดขึ้นได้ครั้งละครั้งแล้วปลดล็อกตารางเมื่อฉันทำเสร็จแล้ว Postgres มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่? โดยเฉพาะอย่างยิ่งฉันกังวลว่าการล็อกนั้นเป็นแบบโกลบอล แต่ไม่จำเป็นต้องเป็น - ฉันแค่ต้องทำให้แน่ใจว่าไม่มีใครพยายามป้อนรหัสนั้นดังนั้นบางทีการล็อกระดับแถวอาจจะใช้งานได้

1
Sch-M WAIT บล็อก Sch-S ใน SQL Server 2014 แต่ไม่ใช่ SQL Server 2008 R2?
เราเพิ่งโอนย้ายอินสแตนซ์การผลิตของเราจาก SQL 2008 R2 ไปเป็นเซิร์ฟเวอร์ SQL 2014 ใหม่ล่าสุด นี่เป็นสถานการณ์ที่น่าสนใจที่เราค้นพบกับการใช้บริการของเรา พิจารณาฐานข้อมูลที่มีBroker Enabled = trueด้วยและMyService MyQueueการจัดการข้อความพิษถูกปิดใช้งานในคิวนี้ มีการสนทนาอย่างน้อย 2 ครั้งที่มีข้อความในคิว ในหนึ่งกระบวนการ (SPID 100) ดำเนินการ: BEGIN TRANSACTION; DECLARE @conversation_group_id UNIQUEIDENTIFIER; RECEIVE TOP (1) @conversation_group_id = conversation_handle FROM MyQueue; โปรดทราบว่าเราปล่อยให้ธุรกรรมเปิดอยู่ ลองนึกภาพว่ามันเป็นโปรแกรม. NET ที่กำลังรอทรัพยากรภายนอกอยู่นาน ผ่านทางsys.dm_tran_locksเราเห็นว่า SPID นี้ได้รับการล็อคทรงเครื่องบนคิว | type | resource_id | mode | status | …

4
MySQL InnoDB ล็อคกุญแจหลักในการลบแม้ใน READ COMMITTED
คำนำ แอปพลิเคชันของเราทำงานหลายเธรดที่ดำเนินการDELETEค้นหาแบบขนาน แบบสอบถามมีผลต่อข้อมูลที่แยกได้เช่นไม่ควรมีความเป็นไปได้ที่DELETEเกิดขึ้นพร้อมกันในแถวเดียวกันจากกระทู้แยก อย่างไรก็ตามตามเอกสาร MySQL ใช้ล็อคที่เรียกว่า 'คีย์ต่อไป' สำหรับDELETEงบซึ่งล็อคทั้งคีย์การจับคู่และช่องว่างบางส่วน สิ่งนี้นำไปสู่การล็อกที่ตายแล้วและทางออกเดียวที่เราพบคือใช้READ COMMITTEDระดับการแยก ปัญหา ปัญหาเกิดขึ้นเมื่อรันDELETEคำสั่งที่ซับซ้อนด้วยJOINs ของตารางขนาดใหญ่ ในบางกรณีเรามีตารางที่มีคำเตือนที่มีเพียงสองแถว แต่แบบสอบถามจำเป็นต้องวางคำเตือนทั้งหมดที่อยู่ในเอนทิตี้บางแห่งจากINNER JOINตาราง ed แยกสองตาราง แบบสอบถามมีดังนี้: DELETE pw FROM proc_warnings pw INNER JOIN day_position dp ON dp.transaction_id = pw.transaction_id INNER JOIN ivehicle_days vd ON vd.id = dp.ivehicle_day_id WHERE vd.ivehicle_id=? AND dp.dirty_data=1 เมื่อตาราง day_position มีขนาดใหญ่พอ (ในกรณีทดสอบของฉันมีแถว 1448) ธุรกรรมใด …

1
ฉันจะป้องกันการล็อคฐานข้อมูล SQLite ได้อย่างไร
จากคำถามที่พบบ่อย SQLite ฉันรู้ว่า: กระบวนการหลายอย่างสามารถเปิดฐานข้อมูลเดียวกันได้ในเวลาเดียวกัน กระบวนการหลายอย่างสามารถทำได้SELECTในเวลาเดียวกัน อย่างไรก็ตามมีเพียงกระบวนการเดียวเท่านั้นที่สามารถเปลี่ยนแปลงฐานข้อมูลได้ทุกเวลา ดังนั้นเท่าที่ผมเข้าใจว่าฉันสามารถ: 1) อ่านฐานข้อมูลจากหลายหัวข้อ ( SELECT) 2) อ่านฐานข้อมูลจากหลายหัวข้อ ( SELECT) และเขียนจากหัวข้อเดียว ( CREATE, INSERT, DELETE) แต่ผมอ่านเกี่ยวกับการเขียนล่วงหน้าล็อกที่ให้ความเห็นพ้องมากขึ้นขณะที่ผู้อ่านไม่ปิดกั้นนักเขียนและนักเขียนจะไม่ปิดกั้นผู้อ่าน การอ่านและการเขียนสามารถดำเนินไปพร้อม ๆ กัน ในที่สุดฉันก็สับสนงงเมื่อฉันพบมันเมื่อมีการระบุ: นี่คือเหตุผลอื่น ๆ สำหรับการรับข้อผิดพลาด SQLITE_LOCKED: พยายามที่จะCREATEหรือDROPตารางหรือดัชนีในขณะที่SELECTคำสั่งยังคงค้างอยู่ กำลังพยายามเขียนลงในตารางในขณะที่ a SELECTกำลังทำงานบนตารางเดียวกัน พยายามทำสองอย่างSELECTในตารางเดียวกันในเวลาเดียวกันในแอปพลิเคชันแบบมัลติเธรดถ้า sqlite ไม่ได้ถูกตั้งค่าให้ทำเช่นนั้น fcntl (3, F_SETLK การเรียกใช้ไฟล์ DB ล้มเหลวซึ่งอาจเกิดจากปัญหาการล็อค NFS ตัวอย่างหนึ่งวิธีแก้ปัญหาสำหรับปัญหานี้คือการลบ mv ออกและคัดลอกกลับเพื่อให้มีค่า Inode ใหม่ ดังนั้นฉันต้องการชี้แจงให้ตัวเองจำเป็นต้องหลีกเลี่ยงการล็อคหรือไม่ ฉันสามารถอ่านและเขียนในเวลาเดียวกันจากสองกระทู้ที่แตกต่างกันได้หรือไม่ …
11 locking  sqlite 

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

4
จะรักษาตัวนับที่ไม่ซ้ำกันต่อแถวด้วย PostgreSQL ได้อย่างไร
ฉันต้องการเก็บหมายเลขการแก้ไข (ต่อแถว) ที่ไม่ซ้ำกันในตาราง document_revisions ซึ่งหมายเลขการแก้ไขถูกกำหนดขอบเขตไว้ที่เอกสารดังนั้นจึงไม่ซ้ำกันกับทั้งตารางเฉพาะกับเอกสารที่เกี่ยวข้อง ตอนแรกฉันคิดเรื่อง: current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123; INSERT INTO document_revisions(rev) VALUES(current_rev + 1); แต่มีสภาพการแข่งขัน! ฉันพยายามที่จะแก้ปัญหาด้วยpg_advisory_lockแต่เอกสารนั้นค่อนข้างหายากและฉันก็ไม่เข้าใจอย่างเต็มที่และฉันไม่ต้องการล็อคบางอย่างโดยไม่ได้ตั้งใจ ต่อไปนี้เป็นที่ยอมรับหรือฉันทำผิดหรือมีวิธีแก้ปัญหาที่ดีกว่า SELECT pg_advisory_lock(123); current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123; INSERT INTO document_revisions(rev) VALUES(current_rev + 1); SELECT pg_advisory_unlock(123); ฉันไม่ควรล็อคแถวเอกสาร (key1) สำหรับการดำเนินการที่กำหนด (key2) แทนหรือไม่ …

2
เมื่อบันทึกถูกล็อคใน Oracle เราจะทราบได้อย่างไรว่าบันทึกใดถูกล็อค
เมื่อบันทึกถูกล็อคเราจะทราบได้อย่างไรว่ารายการใดถูกล็อก ฉันจะรับเรคคอร์ด rowid หรือข้อมูลอื่นได้อย่างไร ฉันสามารถรับข้อมูลบางอย่างจาก sql นี้ SELECT c.ROW_WAIT_OBJ#,c.ROW_WAIT_FILE#,c.ROW_WAIT_BLOCK#,c.ROW_WAIT_ROW# FROM v$locked_object a, dba_objects b, v$session c WHERE a.object_id = b.object_id AND a.SESSION_ID = c.sid(+) ฉันพบวิธีในเว็บเพื่อรับ rowid โดยใช้ฟังก์ชั่น DBMS_ROWID.ROWID_CREATE() แต่ดูเหมือนจะไม่ทำงาน
10 oracle  locking 

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

2
วิธีในการป้องกันคิวรีไม่ให้รอการล็อกระดับตาราง
เราพบปัญหาหลังจากย้ายฐานข้อมูลของลูกค้าไปยังเซิร์ฟเวอร์เพิ่มเติม สิ่งนี้ควรมีผลในเชิงบวกต่อประสิทธิภาพของไซต์ แต่มีปัญหากับการล็อคตารางใน MyISAM (ฉันเคยได้ยินการใช้ InnoDB แทน MyISAM แต่เราไม่สามารถเปลี่ยนเครื่องยนต์ได้ในอนาคตอันใกล้) เราสามารถตรวจสอบมันไปยังแบบสอบถามการปรับปรุงซึ่งจะดำเนินการเมื่อผู้ดูแลเปิดใช้งานความคิดเห็นในบทความ นี่คือกระบวนการ: มีการประมวลผลการอัพเดตเคียวรี SET status = 1 WHERE id = 5(ตั้งค่าดัชนีแล้ว) ไฟล์แคชของหน้าจะถูกลบ เมื่อมาถึงจุดนี้ทั้งหน้าจะช้า ฐานข้อมูลไม่ว่างเป็นเวลาหลายนาที ฉันเรียก processlist ไม่กี่ครั้งและเห็นประมาณ 60 รายการที่แตกต่างกันการเลือกคำสั่งซึ่งทุกคนในรัฐรอล็อคระดับตาราง 1. ฉันไม่ได้ยกเลิกการยืนยันว่าเหตุใดการอัปเดตนี้ในตารางarticle_commentsอาจส่งผลกระทบต่อข้อความเลือกสำหรับตารางarticleเพื่อรอการล็อกระดับตาราง ในรายการกระบวนการแบบสอบถามที่รอเกือบทั้งหมดมาจากตารางนี้ ฉันได้อ่านเกี่ยวกับความจริงที่ว่าการปรับปรุง / การแทรกนั้นเป็นที่ต้องการของการเลือกและสิ่งนี้อาจทำให้เกิดปัญหาดังกล่าวได้ แต่ตัวบทความในตารางไม่ได้รับการอัพเดตเมื่อความคิดเห็นเปิดใช้งานดังนั้นการเลือกไม่ควรรอ ฉันผิดพลาดหรือไม่ 2. มีอะไรอีกบ้างที่นอกเหนือจากการเปลี่ยนเป็น InnoDB เพื่อป้องกันพฤติกรรมนี้หรืออย่างน้อยก็เพื่อให้ได้สมดุลที่ดีขึ้น? ฉันหงุดหงิดมากเกี่ยวกับความจริงที่ว่าปัญหานี้ไม่ปรากฏขึ้นก่อนที่จะย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์ใหม่ ฉันเดาว่ามีการกำหนดค่าผิดพลาดอยู่บ้าง แต่ฉันไม่รู้วิธีระบุตัวตน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.