ผู้ดูแลฐานข้อมูล

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

1
ค่าใช้จ่ายของแถวเมื่อใช้การบีบอัดหน้า?
ฉันสร้างตารางที่มี 650 คอลัมน์ (19,4) คอลัมน์ เมื่อฉันเปิดการบีบอัดหน้าโดยเรียกใช้ ALTER TABLE fct.MyTable REBUILD WITH (DATA_COMPRESSION = PAGE); ฉันเข้าใจ ข่าวสารเกี่ยวกับ 1975, ระดับ 16, สถานะ 1 ดัชนี 'PK_Mytable' ความยาวแถวเกินความยาวสูงสุดที่อนุญาตได้ของ '8060' ไบต์ แต่ 650 ครั้ง 9 ไบต์มีเพียง 5850 ไบต์ซึ่งค่อนข้างไกลจากขีด จำกัด ที่ระบุไว้ที่ 8060 ไบต์ เซิร์ฟเวอร์กำลังเรียกใช้ Windows 2012 r2 ด้วย SQL Server 2016 SP1 CU2 ค่าใช้จ่ายของแถวเมื่อใช้การบีบอัดหน้า? นี่คือรหัสเพื่อแสดงสิ่งที่ฉันหมายถึง: /* …

2
ทำไมคีย์ต่างประเทศแบบคอมโพสิตจึงจำเป็นต้องมีข้อ จำกัด ที่ไม่เหมือนกัน?
นี่คือตารางอย่างง่าย ๆ ที่เรคคอร์ดอาจอ้างอิงเรคคอร์ดหลักในตารางเดียวกัน: CREATE TABLE foo ( id SERIAL PRIMARY KEY, parent_id INT NULL, num INT NOT NULL, txt TEXT NULL, FOREIGN KEY (parent_id) REFERENCES foo(id) ); ด้วยข้อกำหนดเพิ่มเติมที่หนึ่งในค่าเขตข้อมูลอื่น ( num) จะต้องเหมือนกันระหว่างบันทึกผู้ปกครองและเด็กฉันคิดว่าคีย์ต่างประเทศประกอบควรทำเคล็ดลับ ฉันเปลี่ยนบรรทัดสุดท้ายเป็น FOREIGN KEY (parent_id, num) REFERENCES foo(id, num) และมีข้อผิดพลาด: ไม่มีข้อ จำกัด ที่ไม่ซ้ำกันการจับคู่ปุ่มรับสำหรับตารางการอ้างอิง "foo" ฉันสามารถเพิ่มข้อ จำกัด นี้ได้อย่างง่ายดาย แต่ฉันไม่เข้าใจว่าทำไมจึงมีความจำเป็นเมื่อหนึ่งในคอลัมน์ที่อ้างอิง ( id) …

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

4
คำสั่ง DELETE ขัดแย้งกับข้อ จำกัด การอ้างอิง
สถานการณ์ของฉันเป็นดังนี้: ตาราง STOCK_ARTICLES: ID *[PK]* OTHER_DB_ID ITEM_NAME ตาราง LOCATION: ID *[PK]* LOCATION_NAME ตาราง WORK_PLACE: ID *[PK]* WORKPLACE_NAME ตาราง INVENTORY_ITEMS: ID *[PK]* ITEM_NAME STOCK_ARTICLE *[FK]* LOCATION *[FK]* WORK_PLACE *[FK]* 3 FKs ใน INVENTORY_ITEMS อ้างอิงคอลัมน์ "ID" ในตารางอื่น ๆ ที่เกี่ยวข้องอย่างชัดเจน ตารางที่เกี่ยวข้องที่นี่คือ STOCK_ARTICLE และ INVENTORY_ITEMS ขณะนี้มีงาน SQL ประกอบด้วยหลายขั้นตอน (สคริปต์ SQL) ที่ "ประสาน" ฐานข้อมูลที่กล่าวถึงข้างต้นกับฐานข้อมูลอื่น (OTHER_DB) …

2
เลือกแถวที่ตรงตามเงื่อนไขสำหรับกลุ่ม (ไม่มีตารางชั่วคราว)
มีตารางที่มี 3 คอลัมน์: ID category flag 1 A 1 2 A 0 3 A 0 4 B 0 5 C 0 ฉันต้องการเลือกแถวทั้งหมดที่มีflag = 1อย่างน้อยหนึ่งครั้งต่อหมวดหมู่ ผลลัพธ์ที่คาดหวัง: ID category flag 1 A 1 2 A 0 3 A 0 สามารถแก้ไขได้โดยใช้ตารางชั่วคราวเช่นนี้ select ID into #tempTable from someTable where flag = 1 select * …

5
ตัวเลขเฉพาะในช่วงที่กำหนด
เมื่อเร็ว ๆ นี้ฉันได้รับมอบหมายให้พิมพ์หมายเลขเฉพาะทั้งหมด (1-100) ฉันล้มเหลวอย่างมากที่นั่น รหัสของฉัน: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END แม้ว่าฉันจะลงเอยโดยไม่ทำให้เสร็จ แต่ฉันก็สงสัยว่าเป็นไปได้หรือไม่ที่จะทำโปรแกรมเช่นนั้นบนฐานข้อมูล (SQL Server 2008 R2) ถ้าใช่มันจะจบได้อย่างไร

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

1
ความแตกต่างระหว่างการค้นหาดัชนีแบบคลัสเตอร์และการค้นหาแบบไม่จัดกลุ่มดัชนี
อะไรคือความแตกต่างระหว่างการค้นหาดัชนีแบบกลุ่ม (CI) และการค้นหาแบบไม่จัดกลุ่มดัชนี (NCI) มีประสิทธิภาพดีกว่าอีกหรือไม่ เหตุผลที่ฉันถามสิ่งนี้เพราะฉันมีตารางที่มี 50 ล้านแถวและ 150 คอลัมน์ มันมีชื่อคอลัมน์ที่IDกำหนดไว้เป็นดัชนีคลัสเตอร์ มี NCI อีกหนึ่งตัวที่มีรหัสคีย์ดัชนีและincludeคอลัมน์เจ็ดคอลัมน์ที่เหมือนกัน สำหรับฉันแล้วดูเหมือนว่าดัชนี NC ซ้ำกันที่นี่และสามารถทิ้งได้อย่างปลอดภัย ดังนั้นฉันต้องการความคิดเห็น / คำแนะนำจากผู้เชี่ยวชาญหากสามารถทิ้งไว้อย่างปลอดภัยหรือควรรักษาไว้เหมือนเดิม?

2
ทำไมคาสซานดราแนะนำให้สร้างดัชนีในคอลัมน์ที่มีภาวะหัวใจเต้นสูง?
เอกสารประกอบของ Cassandra อย่าใช้ดัชนีในสถานการณ์เหล่านี้: ในคอลัมน์ที่มีความสำคัญสูงเพราะคุณจะต้องค้นหาระเบียนจำนวนมากเพื่อผลลัพธ์จำนวนเล็กน้อย ดูปัญหาในการใช้ดัชนีคอลัมน์ความสำคัญสูงด้านล่าง มันเกิดขึ้น หากคุณสร้างดัชนีในคอลัมน์ความสำคัญสูงซึ่งมีค่าแตกต่างกันจำนวนมากแบบสอบถามระหว่างเขตข้อมูลจะต้องเสียค่าการค้นหาจำนวนมากสำหรับผลลัพธ์ที่น้อยมาก ในตารางที่มีเพลงนับพันล้านเพลงการค้นหาเพลงโดยนักเขียน (ค่าที่มักไม่ซ้ำกันสำหรับแต่ละเพลง) แทนที่จะเป็นศิลปินของพวกเขามีแนวโน้มที่จะไม่มีประสิทธิภาพมาก มันอาจจะมีประสิทธิภาพมากกว่าในการรักษาตารางด้วยตนเองเป็นรูปแบบของดัชนีแทนที่จะใช้ดัชนีในตัวของ Cassandra สำหรับคอลัมน์ที่มีข้อมูลที่ไม่ซ้ำกันบางครั้งประสิทธิภาพที่ดีในการใช้ดัชนีเพื่อความสะดวกตราบใดที่ปริมาณการสืบค้นไปยังตารางที่มีคอลัมน์ที่จัดทำดัชนีอยู่ในระดับปานกลางและไม่อยู่ภายใต้ภาระคงที่ แต่ไม่เคยตอบคำถามจริงๆ: ทำไมมันไม่มีประสิทธิภาพ? ฉันไม่รู้ว่า "การบำรุงรักษาตารางด้วยตนเองในรูปแบบของดัชนี" หมายความว่าอย่างไร แต่แล้วมันค่อนข้างขัดแย้งกับตัวเองด้วย "... บางครั้งก็เป็นการดีที่ควรใช้ดัชนีเพื่อความสะดวกตราบเท่าที่ปริมาณการสืบค้นอยู่ในระดับปานกลาง ... " นี่เป็นเพียงการพยายามบอกให้ฉันใช้ PK เมื่อไรและที่ไหนที่ฉันจะทำได้? ความไร้ประสิทธิภาพคืออะไร ความเข้าใจของฉันคือว่าแบบสอบถามที่จะตีดัชนีจะต้องค้นหาทุกโหนดในคลัสเตอร์และจากนั้นแต่ละโหนดจะทำการค้นหาในดัชนีท้องถิ่นของตนและผลลัพธ์จะได้รับการรวบรวม สิ่งนี้ไม่จำเป็นต้องมีราคาแพง (การค้นหาดัชนีแต่ละรายการควรมีราคาถูกพอสมควร) ยกเว้นว่าเราจ่ายเป็นเวลาแฝงของเครือข่ายเนื่องจากเราต้องรอโหนดที่ช้าที่สุดของล็อต ฉันไม่มีอะไรที่นี่หรือ แต่ถ้าฉันมีคอลเล็กชั่นที่มีสิ่งของมูลค่ามากถึงพันล้าน - ในโอกาสที่หายาก - ต้องได้รับการค้นหาโดยคุณลักษณะที่แตกต่าง แต่ไม่เหมือนใคร ... นี่เป็นการใช้ที่เหมาะสมใช่ไหม? ¹Every? IDK ถ้าการจำลองแบบหมายความว่าสิ่งนี้สามารถเข้าถึง 1/3 ของคลัสเตอร์สำหรับปัจจัยการจำลองที่ 3 หรือไม่?
10 index  cassandra 

1
วิธีการลดการกระจายตัวของฮีปใน SQL Server
ฉันเพิ่งพบว่าหนึ่งตารางกองมีการกระจายตัวมากกว่า 70% ดังนั้นฉันตัดสินใจที่จะทำ ALTER TABLE dbo.myTable REBUILD ตลกพอหลังจากนั้นฉันแยกส่วน 20% ไม่มีการเขียนบนโต๊ะนั้นตั้งแต่นั้นเป็นต้นมา ดังนั้นฉันจึงตัดสินใจที่จะสร้างใหม่อีกครั้ง หลังจากครั้งที่ 2 หมวกตารางการกระจายตัว 50% ดังนั้นยิ่ง! ฉันไม่เข้าใจจริงๆว่ามันจะเกิดอะไรขึ้น ...

1
SQLCLR ชนิดรอในการตรวจสอบกิจกรรมภายใน SQL Server Management Studio (SSMS) คืออะไร
เมื่อฉันตรวจสอบเซิร์ฟเวอร์ SQL Prod ของฉันทุกครั้งที่ฉันเปิดการตรวจสอบกิจกรรมฉันจะเห็นSQLCLRรายการแรกในส่วนรอทรัพยากรในการตรวจสอบกิจกรรม มันมีจำนวนสูงเสมอ มีSQLCLRไว้เพื่ออะไร มันจะไม่ดีสำหรับเซิร์ฟเวอร์ที่SQLCLRมีจำนวนรอทรัพยากรสูงในการตรวจสอบกิจกรรม?

1
การใช้เธรดของผู้ปฏิบัติงานระดับสูง HADR
เหตุใดจำนวนเธรดผู้ปฏิบัติงานของกลุ่มความพร้อมใช้งานในพูล HADR จะเพิ่มขึ้นมากกว่าการใช้งานขั้นต่ำของ " โดยทั่วไปแล้วจะมีเธรดที่ใช้ร่วมกัน 3-10 เธรด " ต่อแบบจำลอง ในกรณีหนึ่งเราได้สังเกตการใช้งาน 300+ เธรดที่มีกลุ่มความพร้อมใช้งาน 3 กลุ่มและรวม 10 ฐานข้อมูล SQL Server 2014 SP1 โอกาสในการขายของเราคือการสำรองข้อมูลในแบบจำลองสำรองกิจกรรมระดับสูงในแบบจำลองหลักรายงานเกี่ยวกับแบบจำลองรอง AG อยู่ในดาต้าเซ็นเตอร์บน VMware ทั้งหมด 16 schedulers รวมหัวข้อคนงานปกติอยู่ภายใต้ 200 ช่วง max_dopบนเซิร์ฟเวอร์คือ 2 3 AG, 10 DB, 4 replica แต่ละอัน - primary, 2 readonly, 1 ไม่สามารถอ่านได้ 1 ที่สองคือซิงค์ 2 async 16 …

3
การสำรองหลายฐานข้อมูลไปยังจุดเดียวกันในเวลา
โดยปกติเมื่อเราเริ่มการสำรองข้อมูลเราไม่อนุญาตให้มีการเปลี่ยนแปลงการกระทำหรือฐานข้อมูลจะไม่สามารถเข้าถึงได้ ฉันหมายถึงฐานข้อมูลจะอยู่ในโหมดผู้ใช้คนเดียว แต่ฉันต้องการเริ่มการสำรองข้อมูลและปล่อย db สำหรับการใช้งาน นอกจากนี้เมื่อฉันเริ่มการสำรองข้อมูลฉันไม่ต้องการให้การเปลี่ยนแปลงอย่างต่อเนื่องถูกเขียนลงในไฟล์สำรอง ฉันต้องการทราบว่าฉันสามารถบรรลุสิ่งนี้ใน Microsoft SQL Server 2012 ได้อย่างไรโปรดช่วยฉันด้วย ให้ฉันอธิบายปัญหาของฉันก่อน ขณะนี้ฉันกำลังตั้งค่าฐานข้อมูลเป็นโหมดผู้ใช้คนเดียวจนกว่าการสำรองข้อมูลจะเสร็จสมบูรณ์ โหมดนี้จะให้บริการตามวัตถุประสงค์ของฉันในการหลีกเลี่ยงการเปลี่ยนแปลงข้อมูลเมื่อมีการสำรองข้อมูลอยู่ แต่แอปพลิเคชันของฉันเชื่อมโยงกับหลายฐานข้อมูล (แต่ละฐานข้อมูลเชื่อมโยงกันและมี var dbs ที่สร้างขึ้นเป็นรายเดือน) ดังนั้นการสำรองฐานข้อมูลเหล่านี้จึงเป็นกระบวนการที่น่าเบื่อและที่สำคัญฉันต้องป้องกันไม่ให้ผู้ใช้ออกจากระบบเมื่อมีการสำรองข้อมูล ดังนั้นฉันกำลังมองหากลไกการสำรองข้อมูลซึ่งจะตอบสนองความต้องการดังกล่าวด้านล่าง เริ่มการสำรองข้อมูล dbs ทั้งหมดในแต่ละครั้งและปล่อย db สำหรับการใช้งาน เนื่องจากฐานข้อมูลเชื่อมโยงกันฉันต้องการให้ความสอดคล้องของข้อมูลในไฟล์สำรอง ดังนั้นเนื่องจากข้อกำหนดความสอดคล้องของข้อมูลนี้ฉันไม่ต้องการให้การเปลี่ยนแปลงดำเนินไปกับไฟล์สำรองของฉัน สิ่งที่ฉันต้องการคือ - สำรองข้อมูล dbs ทั้งหมดในเวลาที่กำหนด

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

2
กดไลค์หรือโหวตโพสต์
ฉันกำลังสร้างโปรแกรมขนาดเล็กที่ผู้ใช้โพสต์หรือเขียนบล็อก ในโพสต์เหล่านั้นผู้ใช้รายอื่นสามารถชอบหรือไม่ชอบโพสต์ดังกล่าวในเฟสบุ๊คหรือโพสต์โหวตลงหรือโพสต์ลงโพสต์ในสแต็คโอเวอร์โฟลว์ ฉันอยากจะรู้โครงสร้างฐานข้อมูลที่ดีซึ่งใช้กันทั่วไปและโปรแกรมทำงานอย่างมีประสิทธิภาพกับโครงสร้างนั้น ฉันมีสองตัวเลือก เป็นครั้งแรก โพสต์: id head message datepost likes dislikes 1 ab anchdg DATE 1,2,3 7,55,44,3 ในทางข้างต้นidเป็น postid ในคอลัมน์1,2,3ไลค์คือรหัสของผู้ใช้ที่ชอบหรืออัปเดตโพสต์หรือบล็อก 7,55,44,3คือรหัสของผู้ใช้ที่ไม่ชอบหรือลดระดับโพสต์หรือบล็อก ที่สอง โพสต์: id head message datepost 1 ab anchdg DATE ชอบอะไร: id postid userid 1 1 1 2 2 2 ไม่ชอบ: id postid userid 1 1 7 2 …

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