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

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

1
การลบอายุอัตโนมัติ (ลบ) ของบันทึกเก่า ๆ ใน Postgres
Postgres มีคุณสมบัติใด ๆ เพื่อรองรับระเบียนเก่าที่ล้าสมัยหรือไม่? ฉันต้องการใช้ Postgres สำหรับบันทึกเป็นคิวซึ่งบันทึก (เหตุการณ์บันทึก) ที่เก่ากว่าสองสัปดาห์ถูกลบโดยอัตโนมัติ

2
ดัชนีในคอลัมน์ที่คำนวณแล้วยังไม่สามารถค้นหาได้
ฉันมีตารางเรียกว่ามีคอลัมน์คำนวณยังคงเรียกว่าAddress Hashkeyคอลัมน์นั้นถูกกำหนดไว้แล้ว แต่ไม่แม่นยำ มันมีดัชนีที่เป็นเอกลักษณ์ของมันที่ไม่สามารถหาได้ ถ้าฉันเรียกใช้แบบสอบถามนี้คืนคีย์หลัก: SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey ฉันได้รับแผนนี้: ถ้าฉันบังคับดัชนีฉันจะได้รับสิ่งนี้ยิ่งแย่ลง: ถ้าฉันพยายามและบังคับทั้งดัชนีและการค้นหาฉันได้รับข้อผิดพลาด: ตัวประมวลผลแบบสอบถามไม่สามารถสร้างแผนแบบสอบถามได้เนื่องจากคำแนะนำที่กำหนดไว้ในแบบสอบถามนี้ ส่งแบบสอบถามอีกครั้งโดยไม่ระบุคำแนะนำใด ๆ และไม่ใช้SET FORCEPLAN นี่เป็นเพียงเพราะมันไม่แม่นยำใช่ไหม ฉันคิดว่าไม่สำคัญว่ามันจะยังคงอยู่หรือไม่? มีวิธีทำให้ดัชนีนี้ค้นหาได้โดยไม่ทำให้คอลัมน์นี้ไม่คำนวณหรือไม่ ใครบ้างมีลิงค์ไปยังข้อมูลเกี่ยวกับเรื่องนี้? ฉันไม่สามารถโพสต์การสร้างตารางจริง แต่นี่เป็นตารางทดสอบที่มีปัญหาเดียวกัน: drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', …

2
โทรไปยังฟังก์ชั่นเดียวกันพร้อมกัน: เกิดการชะงักงันได้อย่างไร
ฟังก์ชั่นของฉันnew_customerถูกเรียกหลายครั้งต่อวินาที (แต่เพียงครั้งเดียวต่อเซสชัน) โดยเว็บแอปพลิเคชัน สิ่งแรกที่มันทำคือล็อคcustomerตาราง (เพื่อทำการ 'แทรกถ้าไม่มี' - ตัวแปรง่าย ๆ ของupsert) ความเข้าใจของฉันเกี่ยวกับเอกสารก็คือการโทรอื่น ๆnew_customerควรเพียงแค่รอจนกว่าการโทรก่อนหน้านี้ทั้งหมดจะเสร็จสิ้น: LOCK TABLE จะได้รับการล็อคระดับโต๊ะโดยรอถ้าจำเป็นเพื่อให้การปลดล็อกที่มีข้อขัดแย้งเกิดขึ้น ทำไมบางครั้งมันถึงตายแทน ความหมาย: create function new_customer(secret bytea) returns integer language sql security definer set search_path = postgres,pg_temp as $$ lock customer in exclusive mode; -- with w as ( insert into customer(customer_secret,customer_read_secret) select secret,decode(md5(encode(secret, 'hex')),'hex') where …

4
ฉันจะแปลงคีย์ในรายงานการหยุดชะงักของ SQL Server เป็นค่าได้อย่างไร
ฉันมีรายงานการหยุดชะงักที่บอกฉันว่ามีข้อขัดแย้งเกี่ยวกับ waitresource = "KEY: 9: 72057632651542528 (543066506c7c)" และฉันเห็นสิ่งนี้: <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> ภายใน <resource-list> ฉันต้องการที่จะหาค่าที่แท้จริงสำหรับคีย์ (id = 12345 เป็นต้น) ฉันต้องใช้คำสั่ง SQL อะไรในการรับข้อมูลนั้น

1
'LIMIT 0, 1' และ 'LIMIT 1' มีความแตกต่างหรือไม่?
ฉันเพิ่งสะดุดเมื่อรหัสตัวอย่างซึ่งแตกต่างจากสัญลักษณ์เหล่านี้ SELECT * FROM table LIMIT 0, 1 SELECT * FROM table LIMIT 1 อาร์กิวเมนต์แรกควรถูกพิจารณาว่าเป็นออฟเซ็ตหากฉันไม่ผิดวัตถุประสงค์ของแบบสอบถามทั้งสองนั้นคือ จำกัด การเลือกให้อยู่ในแถวแรกของ table มีผลกระทบเชิงลบเมื่อออกจากออฟเซ็ต / เป็นไปได้อย่างไรที่จะปล่อยมันออกมาตั้งแต่แรก? หรือฉันเข้าใจผิดแบบสอบถาม?
15 mysql 

1
sp_cursoropen และขนาน
ฉันพบปัญหาด้านประสิทธิภาพด้วยข้อความค้นหาที่ฉันไม่สามารถเข้าใจได้ ฉันดึงแบบสอบถามออกจากคำจำกัดความของเคอร์เซอร์ แบบสอบถามนี้ใช้เวลาไม่กี่วินาทีในการดำเนินการ SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

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

2
หลีกเลี่ยงการละเมิดที่ไม่ซ้ำกันในการทำธุรกรรมอะตอม
เป็นไปได้ในการสร้างธุรกรรมอะตอมมิกใน PostgreSQL? พิจารณาฉันมีหมวดหมู่ตารางที่มีแถวเหล่านี้: id|name --|--------- 1 |'tablets' 2 |'phones' และชื่อคอลัมน์มีข้อ จำกัด ที่ไม่ซ้ำกัน ถ้าฉันลอง: BEGIN; update "category" set name = 'phones' where id = 1; update "category" set name = 'tablets' where id = 2; COMMIT; ฉันได้รับ: ERROR: duplicate key value violates unique constraint "category_name_key" DETAIL: Key (name)=(tablets) already exists.

2
มีวิธีใดในการลด / ลดขนาด tempdb.mdf โดยไม่ต้องรีสตาร์ท SQL Server
มีความจำเป็นต้องรีสตาร์ท SQL Server หลังจากที่DBCC SHRINKFILEในtempdb.mdfหรือมีวิธีการอื่น ๆ เพื่อลดขนาดของtempdb.mdfโดยไม่ต้องรีสตาร์ท SQL Server? กรุณาช่วยตามที่ฉันต้องการสำหรับเซิร์ฟเวอร์ที่ใช้งานจริงและฉันหวังว่าจะลดขนาดลงโดยไม่ต้องหยุดทำงาน
15 sql-server 

1
อ่านแถวที่อัปเดตบางส่วนหรือไม่
สมมติว่าฉันมีสองแบบสอบถามทำงานในสองช่วงแยกกันใน SSMS: เซสชั่นแรก: UPDATE Person SET Name='Jonny', Surname='Cage' WHERE Id=42 เซสชั่นที่สอง: SELECT Name, Surname FROM Person WITH(NOLOCK) WHERE Id > 30 เป็นไปได้ไหมที่SELECTคำแถลงสามารถอ่านแถวที่มีการอัพเดตครึ่งหนึ่งได้เช่นเดียวกับName = 'Jonny'และSurname = 'Goody'? แบบสอบถามจะถูกดำเนินการเกือบจะพร้อมกันในเซสชันที่แยกต่างหาก

2
การค้นหารายการใบรับรองการเข้ารหัสสำหรับฐานข้อมูล
มีการใช้ใบรับรองใดในการเข้ารหัสแต่ละฐานข้อมูลในอินสแตนซ์ ฉันสามารถรับข้อมูลโดยใช้ข้อมูลต่อไปนี้ แต่ฉันจะเขียนแบบสอบถามได้อย่างไร USE master GO -- this provides the list of certificates SELECT * FROM sys.certificates -- this provides the list of databases (encryption_state = 3) is encrypted SELECT * FROM sys.dm_database_encryption_keys WHERE encryption_state = 3; ฉันสังเกตเห็นว่าคอลัมน์ sys.certifcates.thumbprint และ sys.dm_database_encryption_keys.encryptor_thumbprint มีข้อมูลเดียวกัน

2
ผลกระทบใดที่จะลดขนาดของคอลัมน์ varchar ที่มีต่อไฟล์ฐานข้อมูล
เรามีตารางจำนวนหนึ่งในฐานข้อมูลของเราที่มีVARCHAR(MAX)คอลัมน์ที่VARCHAR(500)(หรือบางสิ่งที่เล็กกว่ามาก) จะพอเพียง โดยธรรมชาติฉันต้องการทำความสะอาดสิ่งเหล่านี้และทำให้ขนาดลงไปถึงระดับที่สมเหตุสมผลยิ่งขึ้น 'วิธีการ' ที่จะทำสิ่งนี้ฉันเข้าใจ: คำถามของฉันคือสิ่งที่จะแก้ไขคอลัมน์เหล่านี้ทำในหน้าและที่มีอยู่ในดิสก์? (มีข้อมูลมากมายเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณขยายคอลัมน์ แต่มีปัญหาในการค้นหาข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณย่อขนาด) ตารางบางตัวมีจำนวนแถวน้อยมากดังนั้นฉันจึงไม่กังวลเกี่ยวกับค่าใช้จ่ายในการเปลี่ยนแปลง แต่บางตารางมีขนาดค่อนข้างใหญ่และฉันกังวลว่าอาจมีการจัดระเบียบใหม่และทำให้การบล็อก / การหยุดทำงานเป็นจำนวนมาก ในทางปฏิบัติฉันต้องการวิธีประมาณหน้าต่างการบำรุงรักษา โดยทั่วไปฉันต้องการทำความเข้าใจให้ดีขึ้นว่าเอ็นจิ้นฐานข้อมูลทำงานอย่างไรในกรณีนี้ ขอบคุณล่วงหน้า! แก้ไข: ฉันมีตาราง 20 ตารางที่ฉันดู แต่มีเพียงครึ่งหนึ่งเท่านั้นที่มีจำนวนแถวมากกว่า 1,000 ใหญ่ที่สุดมีเกือบล้านแถว ผู้กระทำความผิดที่เลวร้ายที่สุดคือตารางที่มี 350,000 แถวและสี่VARCHAR(MAX)คอลัมน์ที่สามารถหดได้ถึงVARCHAR(500)ระดับ

1
เหตุใดผู้ดำเนินการรวมจึงใช้หลังจากการสแกนดัชนีที่ไม่ซ้ำ
ฉันมีตารางที่มีดัชนีที่ไม่ซ้ำซึ่งกรองแล้วสำหรับค่าที่ไม่เป็นโมฆะ ในแผนแบบสอบถามมีการใช้งานที่แตกต่างกัน มีเหตุผลสำหรับสิ่งนี้หรือไม่? USE tempdb CREATE TABLE T1( Id INT NOT NULL IDENTITY PRIMARY KEY ,F1 INT , F2 INT ) go CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL GO INSERT INTO T1(f1,F2) VALUES(1,1),(1,2),(2,1) SELECT DISTINCT F1,F2 FROM T1 …

3
วิธีรับการใช้งาน CPU ตามฐานข้อมูลสำหรับอินสแตนซ์เฉพาะ
ฉันพบข้อความค้นหาต่อไปนี้เพื่อตรวจจับการใช้งาน CPU ตามฐานข้อมูล แต่มีการแสดงผลลัพธ์ที่แตกต่าง: WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], …

1
ฉันจะออกแบบแบบสอบถามเพื่อหยุดชั่วคราว / พัก / รอเป็นระยะเวลาที่กำหนดได้อย่างไร
ฉันกำลังทดสอบแอปพลิเคชันตรวจสอบกับอินสแตนซ์ SQL Server 2000 ฉันจะเขียนเคียวรี T-SQL ที่ใช้เวลาในการระบุได้อย่างไร ตัวอย่างเช่นภาษาสคริปต์ส่วนใหญ่มีSLEEPคำสั่งที่ให้คุณหยุดการทำงานของสคริปต์ชั่วคราวตามเวลาที่กำหนด ฉันกำลังมองหาสิ่งที่คล้ายกันที่เข้ากันได้กับ SQL Server 2000 นี่คือจุดประสงค์เพื่อทดสอบการตั้งค่าขีด จำกัด การสืบค้นที่ใช้งานได้ยาวนานของแอปพลิเคชันการตรวจสอบ

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