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

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

3
ลบล้านแถวออกจากตาราง SQL
ฉันต้องลบมากกว่า 16 ล้านระเบียนจากตารางแถว 221 ล้านและมันจะช้ามาก ฉันขอขอบคุณถ้าคุณแบ่งปันคำแนะนำในการทำโค้ดด้านล่างให้เร็วขึ้น: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500); SET DEADLOCK_PRIORITY LOW; SET @BATCHSIZE = 4500; SET @ITERATION = 0; SET @TOTALROWS = 0; BEGIN TRY BEGIN TRANSACTION; WHILE @BATCHSIZE > 0 BEGIN DELETE TOP (@BATCHSIZE) FROM MySourceTable …

1
นายหน้าบริการ - อายุการสนทนาหรือไม่
เราพยายามให้ Service Broker ทำงานในสภาพแวดล้อมของเราเพื่อแก้ไขปัญหาทางธุรกิจ ฉันไม่รู้ว่าชื่อข้อความนั้นดีหรือไม่ แต่คำถามของฉันอยู่ด้านล่าง แต่มันอาจไม่ใช่คำถามที่ดีดังนั้นหลังจากนั้นคือสิ่งที่เรากำลังทำอยู่และทำไมฉันจึงคิดว่ามันเป็นคำถามที่ถูกต้อง ควรส่งข้อความในการสนทนากี่ข้อความก่อนที่จะสิ้นสุดการสนทนา เราต้องการใช้ Service Broker เพื่ออัพเดทตารางผลลัพธ์แบบอะซิงโครนัส ตารางผลลัพธ์แบนและรวดเร็ว เรามีทริกเกอร์ในตารางฐานที่ส่งข้อความพร้อมกับตารางและคีย์หลัก เรามีสามคิว: เวลาตอบสนองต่ำ - เป้าหมายคือ 15 วินาทีในการประมวลผล มันจัดการรายการที่เปลี่ยนแปลงที่เกี่ยวข้องกับรายการที่เฉพาะเจาะจง คิวจำนวนมาก - วัตถุประสงค์คือ 5 นาทีในการดำเนินการ มันจัดการเมื่อมีการเปลี่ยนแปลงบางอย่างที่มีผลต่อหลายร้อย (หรือหลายพัน) รายการ มันแบ่งรายชื่อของรายการที่ได้รับผลกระทบและฟีดพวกเขาไปยังคิวเวลาแฝงต่ำรอการตัดบัญชี เวลารอตอบสนองต่ำรอการตัดบัญชี - วัตถุประสงค์คือ 30 นาทีในการดำเนินการ สิ่งนี้จะประมวลผลรายการ แต่จากคิวจำนวนมากเท่านั้น โดยทั่วไปหากข้อมูลของลูกค้าอัพเดท ที่มีผลต่อผลิตภัณฑ์จำนวนมากเพื่อให้ส่งไปยังคิวจำนวนมากเพื่อการประมวลผลที่ช้าลง อย่างไรก็ตามหากผลิตภัณฑ์ได้รับการอัพเดตผลิตภัณฑ์นั้นจะถูกส่งไปยังคิวเวลาแฝงต่ำ เราใช้การสนทนาที่คล้ายกับบล็อกของ Remus Rusanu อีกครั้งhttp://rusanu.com/2007/04/25/reusing-conversations/ยกเว้นว่าเราดำเนินการตามโมดูลัสของคีย์หลัก สิ่งนี้มีประโยชน์ด้านการช่วยเหลือในการทำซ้ำของคีย์หลัก ดังนั้นเราจึงใช้การสนทนาอีกครั้งและอยู่ในหลักเกณฑ์ของเรา ด้วยสองเธรดฉันสามารถเขียนข้อความถึง 125 ข้อความ / …

2
SSRS จะสูญพันธุ์เร็ว ๆ นี้และ PowerBI เป็นรุ่นใหม่หรือไม่
ฉันอ่าน SQL Server 2017 จะรวม PowerBI Server แล้ว พวกเขายังย้าย SSRS ไปยังตัวติดตั้งที่แตกต่างกันดังนั้นจึงจะไม่ได้รับการทำแพคเกจในการติดตั้ง SQL Server ดั้งเดิม นี่หมายความว่า Microsoft จะพยายามเลิกใช้ SSRS ในที่สุดหรือไม่ ทีมของเราควรพยายามสร้างรายงานใหม่ใน PowerBI และเปลี่ยนรายงาน SSRS ก่อนหน้าหรือไม่

1
สร้างดัชนีออฟไลน์ใหม่บนตารางที่แบ่งพาร์ติชัน
ถ้าฉันตารางพาร์ทิชันด้วยntext, textหรือimageประเภทข้อมูลและสร้างดัชนีบนพาร์ติชันเดียวที่มีonline = offไม่ว่าล็อคตารางทั้งหมดหรือเพียงแค่พาร์ทิชันในคำถาม?

1
sp_cursorprepexec ทำให้ 53 ล้านอ่าน?
เรากำลังเรียกใช้การติดตั้ง Dynamics AX 2012 ด้วย SQL Server 2012 ฉันรู้ว่าเคอร์เซอร์ไม่ควรใช้อีกต่อไป แต่ AX กำลังใช้มันและเราไม่สามารถเปลี่ยนพฤติกรรมนี้ดังนั้นเราจึงต้องทำงานกับมัน วันนี้ฉันได้รับข้อความค้นหาที่แย่มากโดยมีผู้อ่านมากกว่า 53 ล้านคนและเวลาดำเนินการมากกว่า 20 นาที ฉันตรวจสอบข้อความค้นหานี้ผ่านเครื่องมือตรวจสอบของเรา SentryOne declare @p1 int set @p1=1073773227 declare @p2 int set @p2=180158805 declare @p5 int set @p5=16 declare @p6 int set @p6=1 declare @p7 int set @p7=2 exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 …

1
การ zeroing WAL เซกเมนต์ใน Postgres
เรามีฐานข้อมูล Postgres ค่อนข้างต่ำพร้อมการจัดเก็บลงสื่อถาวรอย่างต่อเนื่องเพื่อบีบอัดแต่ละส่วน WAL และส่งไปยัง S3 เนื่องจากเป็นระบบที่มีปริมาณน้อยจึงเข้าชมarchive_timeoutทุกๆ 10 นาทีและเก็บถาวรส่วน WAL ที่ไม่ได้ใช้ซึ่งส่วนใหญ่ใช้ในการบีบอัดได้ดีเนื่องจากเป็นศูนย์ อย่างไรก็ตาม Postgres จะรีไซเคิลเซกเมนต์ WAL เพื่อหลีกเลี่ยงค่าใช้จ่ายในการจัดสรรไฟล์ใหม่ที่สวิตช์ WAL แต่ละอันซึ่งมีประโยชน์ในสถานการณ์โหลดสูง แต่ก็หมายความว่าหลังจากเกิดกิจกรรมที่หนักกว่าปกติตอนนี้ไฟล์เซกเมนต์ WAL ของเราเต็มแล้ว ของขยะจากเซ็กเมนต์ก่อนหน้าและไม่บีบอัดได้ดีเลย เรากำลังจัดเก็บสำเนาขยะทั้งหมดนี้จำนวนมาก มีวิธีใดที่จะลดปริมาณพื้นที่ที่เราใช้ในการเก็บถาวร WAL ของเราหรือไม่ ความเป็นไปได้ย่อยบางอย่าง: ป้องกัน Postgres จากการรีไซเคิลกลุ่ม WAL อย่างใดดังนั้นจึงเริ่มต้นด้วยไฟล์ zeroed ในแต่ละครั้ง เอกสารไม่ได้ระบุว่ามีตัวเลือกสำหรับการทำเช่นนี้ แต่ฉันอาจพลาดไป ให้ Postgres เป็นศูนย์ไฟล์ WAL เมื่อมันเริ่มต้น / เสร็จสิ้นการใช้งาน อีกครั้งเอกสารดูเหมือนจะไม่แนะนำว่าเป็นไปได้ เป็นศูนย์ภายนอกหรือลบไฟล์เซกเมนต์ WAL บางส่วนในขณะที่ไม่ได้ใช้งาน มีวิธีที่ปลอดภัยในการระบุไฟล์นี้หรือไม่? ศูนย์ส่วนที่ไม่ได้ใช้ของเซ็กเมนต์ก่อนเก็บถาวรโดยใช้เอาต์พุตจากpg_xlogdumpเพื่อค้นหาตำแหน่งที่ขยะเริ่มต้น เป็นไปได้แม้ว่าฉันจะไม่ชอบมัน …

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

1
เหตุใดการลบในมุมมองที่พาร์ติชันของฉันจึงทำให้การแทรกดัชนีแบบกลุ่ม?
ฉันมีมุมมองที่แบ่งพาร์ติชันซึ่งมีทริกเกอร์แทรกด้านล่าง (พาร์ติชัน Mans ไม่ดี) เมื่อฉันทำการลบฉันได้รับแผนแบบสอบถามด้านล่าง: delete from factproductprice where pricedate = '20170725' ทริกเกอร์ในมุมมอง: ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice] INSTEAD OF DELETE AS BEGIN IF @@ROWCOUNT = 0 RETURN; DECLARE @PriceDate DATE SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED IF @PriceDate BETWEEN '20140101' AND '20141231' BEGIN DELETE FROM dbo.FactProductPrice2014 WHERE …

3
เข้าร่วมด้วยตนเองในคีย์หลัก
พิจารณาคำถามนี้ซึ่งประกอบด้วยการรวมNตัวเอง: select t1.* from [Table] as t1 join [Table] as t2 on t1.Id = t2.Id -- ... join [Table] as tN on t1.Id = tN.Id มันสร้างแผนการดำเนินการด้วยการสแกนดัชนี N คลัสเตอร์และการรวม N-1 ผสาน สุจริตฉันไม่เห็นเหตุผลใด ๆ ที่จะไม่เพิ่มประสิทธิภาพการเข้าร่วมทั้งหมดและทำการสแกนดัชนีแบบคลัสเตอร์เดียวเพียงครั้งเดียวนั่นคือปรับการค้นหาดั้งเดิมให้เหมาะกับสิ่งนี้: select t1.* from [Table] as t1 คำถาม เหตุใดการรวมจึงไม่ได้รับการปรับให้เหมาะสม มันไม่ถูกต้องทางคณิตศาสตร์หรือไม่ที่จะบอกว่าการเข้าร่วมทุกครั้งไม่เปลี่ยนชุดผลลัพธ์ ทดสอบเมื่อ: เซิร์ฟเวอร์ต้นทางรุ่น: SQL Server 2014 (12.0.4213) Source Database …

1
ข้อความแบบเต็ม: FT_MASTER_MERGE จำนวนมากรอสถานะ SUSPENDED หลังจากสร้างดัชนีข้อความแบบเต็มหลายรายการ (เซิร์ฟเวอร์หยุดทำงาน)
เราทำการทดสอบบน SQL Server 2014 เมื่อเรามี 10 ฐานข้อมูล 100 schema ที่แตกต่างกันในแต่ละฐานข้อมูล 10 ตาราง (~ 50 แถว) ตารางเล็ก ๆ ในแต่ละ schema (ดังนั้น 10K ตารางทั้งหมด) และเราสร้างดัชนีข้อความทั้งหมดในสิ่งเหล่านี้ ตารางในฐานข้อมูลเหล่านี้ทั้งหมดพร้อมกัน ในหลายนาทีเราพบว่า SQL Server หยุดการยอมรับการเชื่อมต่อใด ๆ (ยกเว้นADMIN:.การเชื่อมต่อ) หากเรารีสตาร์ทเซิร์ฟเวอร์เราสามารถเชื่อมต่อได้ แต่ในบางครั้งมันก็หยุดทำงานอีกครั้ง หลังจากการตรวจสอบบางอย่างเราพบว่ามันเกิดจากการบริโภคกระทู้ทำงานทั้งหมดdm_os_tasksและdm_os_waiting_tasksแสดงให้เราเห็นว่ามีสถานะFT_MASTER_MERGEรออยู่SUSPENDEDมากมาย เรา googled ว่า "ข้อความแบบเต็มกำลังรอการดำเนินการผสานหลัก" แต่ไม่พบข้อมูลที่แท้จริงอีกต่อไป เราลองกำหนดค่าแคตตาล็อกข้อความเต็มรูปแบบที่แตกต่างกัน: หนึ่งแคตตาล็อกต่อ DB, หนึ่งแค็ตตาล็อกต่อสคีมา, หนึ่งแคตตาล็อกต่อดัชนี อย่างไรก็ตามเซิร์ฟเวอร์หยุดทำงานกับงานที่ถูกระงับเหล่านี้ทั้งหมด อะไรคือสาเหตุของการรอคอยสิ่งนี้สามารถแก้ไข / บรรเทาได้อย่างไร และอะไรคือวิธีที่แนะนำในการเปิดใช้งานข้อความแบบเต็มบนตารางจำนวนมากเช่นนี้

2
MySQL จัดเก็บประเภทข้อมูลจุดเป็น LAT LNG หรือ LNG LAT หรือไม่
ฉันเคยเห็นรูปแบบสถานที่เป็นละติจูดตามด้วยลองจิจูด แต่ใช้ห้องสมุดฉันเชื่อว่าฉันเข้าใจ MySQL เพื่อเก็บไว้เป็นPOINT(LNG LAT)ลำดับกลับกัน ห้องสมุดของฉันผิดหรือเป็นรูปแบบจริงหรือไม่ ฉันไม่พบรายละเอียดนี้ในเอกสาร MySQL
9 mysql  spatial 

2
แผนแบบสอบถามส่วนใหญ่สร้างขึ้นใหม่ใน 4 ชั่วโมงที่ผ่านมา
ฉันมีปัญหากับประสิทธิภาพของฐานข้อมูล SQL Server ของฉัน ฉันได้พบเครื่องมือนี้sp_BlitzCache หลังจากรันคำสั่งฉันได้รับข้อความนี้: คุณมีแผนสร้าง 92.00% ใน 24 ชั่วโมงที่ผ่านมาและสร้างขึ้น 92.00% ใน 4 ชั่วโมงที่ผ่านมา ขณะที่ฉันระบุปัญหา (โดยใช้ SQL Server Profiler ฉันได้ตรวจสอบเหตุการณ์ที่เกิดขึ้นของ StmtRecompile) ฉันสามารถค้นหาข้อความค้นหาแบบเต็มเพียงไม่กี่คำที่สร้างขึ้นมาใหม่บ่อยครั้ง อย่างไรก็ตามข้อความค้นหาแบบเต็มจะแสดงเพียง 5% ของคำค้นหาทั้งหมด คุณมีข้อเสนอแนะอะไรบ้างที่อาจทำให้แผนพักผ่อนที่เหลืออยู่ 87% เป็นไปได้? ฉันมี SQL Server 2012 (รุ่น 11.0.6567.0) แก้ไข: ฉันเพิ่มเคาน์เตอร์วัดประสิทธิภาพแล้ว +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | …

2
ทราฟฟิกเครือข่ายเข้ารหัสเมื่อทำการสำรองข้อมูลระยะไกลโดยใช้ SQL Server TDE หรือไม่
พวกเขาบอกว่าไม่มีสิ่งเช่น "คำถามโง่ ๆ " ดังนั้นที่นี่จะไป: ฉันเข้าใจว่า SQL Server Transparent Data Encryption (TDE) เข้ารหัสข้อมูลที่เหลือเพื่อให้ไฟล์ฐานข้อมูลของคุณ (.mdf) และไฟล์สำรองของคุณ (.bak) ได้รับการเข้ารหัสหากมีคนบุกเข้าไปในที่เก็บของคุณและขโมยไฟล์เหล่านั้น ฉันยังเข้าใจว่าข้อมูลถูกถอดรหัสเมื่ออ่านจากดิสก์เพื่อให้ไม่ได้เข้ารหัสในหน่วยความจำ (ขณะเคลื่อนไหว) ดังนั้นข้อมูลที่ร้องขอโดยผู้ใช้ที่เรียกใช้แบบสอบถามระยะไกล (เลือก * จาก SensitiveData) จะไม่ถูกเข้ารหัสเมื่อเดินทางผ่านเครือข่ายจึงมีความเสี่ยงที่จะถูกดักข้อมูล ดังนั้นสมมติว่าทั้งหมดข้างต้นถูกต้องนี่คือคำถามโง่ของฉัน: ถ้าอินสแตนซ์ SQL Server ของฉันอยู่ในคอมพิวเตอร์ A และการสำรองข้อมูลฐานข้อมูล TDE ของฉันจะถูกตัดออกไปที่จัดเก็บในคอมพิวเตอร์ระยะไกล B เป็นข้อมูลการดำเนินการสำรองข้อมูล คอมพิวเตอร์ A ที่จะเขียนไปยังดิสก์ที่คอมพิวเตอร์ B? ฉันคิดว่ามันจะต้องเป็น (เพราะฉันคิดว่าการดำเนินการเข้ารหัสเกิดขึ้นบนคอมพิวเตอร์ A ก่อน) แต่ฉันไม่สามารถหาคำยืนยันได้ในเอกสารใด ๆ ของ Microsoft หรือในบล็อก ในระหว่างการดำเนินการกู้คืน …

3
DISTINCT ในหนึ่งคอลัมน์และกลับแถวบนสุด
คุณค้นหาลูกค้าที่ไม่ซ้ำใครสามรายที่มีจำนวนมากที่สุดได้Purchase_Costอย่างไร ฉันต้องการใช้DISTINCTเฉพาะในCustomer_Nameแต่แบบสอบถามด้านล่างใช้ความแตกต่างในคอลัมน์ทั้งสาม ฉันจะปรับเปลี่ยนแบบสอบถามเพื่อให้ได้ผลลัพธ์ที่ต้องการได้อย่างไร SELECT DISTINCT TOP 3 customer_name, order_no, Purchase_Cost FROM PurchaseTable ORDER BY Purchase_Cost

1
ไม่สามารถตัดทอนบันทึกธุรกรรม log_reuse_wait_desc - AVAILABILITY_REPLICA
เช้านี้ฉันตื่นขึ้นมาด้วยการทำธุรกรรมบันทึกการแจ้งเตือนอย่างเต็มรูปแบบในหนึ่งในฐานข้อมูลของเรา เซิร์ฟเวอร์นี้เป็นคลัสเตอร์ alwayson และยังเป็นสมาชิกการจำลองแบบของทรานแซคชัน ฉันตรวจสอบ log_reuse_wait_desc และพบว่ามีการสำรองข้อมูล มีคนปิดการใช้งานการสำรองข้อมูลโดยไม่ตั้งใจ 4 วันก่อนหน้าฉันเปิดใช้งานงานสำรองข้อมูลบันทึกอีกครั้งและบันทึกถูกล้าง ตั้งแต่ 4 โมงเช้าฉันคิดว่าฉันจะไปทำงานในภายหลังในเช้าวันนั้นและปัดท่อนไม้ตามที่มันโตขึ้นเป็น 400GB 10:00 น. - ฉันอยู่ในสำนักงานและฉันตรวจสอบการใช้งานบันทึกก่อนที่จะย่อขนาดลงและประมาณ 16% ฉันประหลาดใจและตรวจสอบ log_reuse_wait_desc ซึ่งแสดงการจำลองแบบ ฉันสับสนเพราะนี่เป็นสมาชิกการจำลองแบบ จากนั้นเราเห็นว่า db ถูกเปิดใช้งานสำหรับ CDC และคิดว่าอาจเป็นสาเหตุ CDC ที่ถูกปิดใช้งานและตอนนี้ log_reuse_wait_desc แสดง AVAILABILITY_REPLICA การใช้งานบันทึกในขณะที่ยังคงเติบโตอย่างต่อเนื่องและที่ 17% ในขณะนี้ ฉันตรวจสอบแดชบอร์ด alwayson และตรวจสอบคิวที่ส่งและทำซ้ำและทั้งคู่นั้นแทบจะเป็นศูนย์ ฉันไม่แน่ใจว่าทำไมการใช้บันทึกซ้ำจึงแสดงเป็น AVAILABILITY_REPLICA และไม่สามารถล้างบันทึกได้ มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น?

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