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

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

1
สิ่งที่ทำให้ SQL Server แลกเปลี่ยนชื่อวัตถุสำหรับสตริงที่ส่งผ่านไปยังโพรซีเดอร์ระบบ
สิ่งที่ทำให้มันถูกต้องตามกฎหมายที่จะส่งชื่อวัตถุที่จะขั้นตอนของระบบที่เก็บไว้sp_helptext? กลไกใดที่แปลงชื่อวัตถุเป็นสตริง เช่น -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.' -- an additional case that does not work. …

1
การติดตั้ง PgAdmin 4 บน Debian / Ubuntu [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา PgAdmin 4 1.0 เพิ่งเปิดตัว แต่ในหน้าดาวน์โหลดสำหรับ Linux มีเพียงลิงก์ไปยังตัวติดตั้งยำ ใครรู้ว่ามีแผนจะสร้างตัวติดตั้ง deb หรือไม่? หรือถ้ามีอยู่แล้ว?

1
การเปลี่ยนแปลงค่าประมาณของเพรดิเคตที่มี SUBSTRING () ใน SQL Server 2016 หรือไม่
มีเอกสารหรืองานวิจัยใดเกี่ยวกับการเปลี่ยนแปลงใน SQL Server 2016 ถึงความคาดการณ์ของ cardinality สำหรับเพรดิเคตที่มี SUBSTRING () หรือฟังก์ชันสตริงอื่น ๆ หรือไม่? เหตุผลที่ฉันถามคือฉันกำลังดูคิวรีที่ประสิทธิภาพลดลงในโหมดความเข้ากันได้ 130 และสาเหตุที่เกี่ยวข้องกับการเปลี่ยนแปลงในการประมาณจำนวนแถวที่ตรงกับส่วนคำสั่ง WHERE ที่มีการเรียกไปยัง SUBSTRING () ฉันแก้ไขปัญหาด้วยการเขียนแบบสอบถามใหม่ แต่สงสัยว่าถ้าใครรู้เรื่องเอกสารเกี่ยวกับการเปลี่ยนแปลงในพื้นที่นี้ใน SQL Server 2016 รหัสการสาธิตอยู่ด้านล่าง ค่าประมาณใกล้เคียงกันมากในกรณีทดสอบนี้ แต่ความแม่นยำนั้นขึ้นอยู่กับข้อมูล ในกรณีทดสอบในระดับที่เข้ากันได้ 120, SQL Server ดูเหมือนจะใช้ฮิสโตแกรมสำหรับการประมาณการในขณะที่ในระดับที่เข้ากันได้ 130 SQL Server ดูเหมือนจะสมมติว่า 10% คงที่ของตารางที่ตรงกัน CREATE DATABASE MyStringTestDB; GO USE MyStringTestDB; GO DROP TABLE IF EXISTS dbo.StringTest; …

4
การเปรียบเทียบค่า NULL ด้วยตนเองในตาราง
ฉันมักจะสับสนเกี่ยวกับพฤติกรรม t-sql ลึกลับบางอย่างเช่นต่อไปนี้ -- Create table t and insert values. use tempdb CREATE TABLE dbo.t (a INT NULL); -- insert 3 values INSERT INTO dbo.t values (NULL),(0),(1); GO set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null go -- expect 3 …

4
มีค่าที่ฉันสามารถใช้ใน SELECT TOP ที่จะส่งคืนแถวทั้งหมดหรือไม่
ฉันอนุญาตให้ผู้ใช้กำหนดจำนวนแถวที่ส่งคืนโดยแบบสอบถาม (SELECT TOP (@x)) มีค่าที่สามารถป้อนที่ส่งคืนแถวทั้งหมดหรือไม่ หรือฉันต้องสร้างคิวรีแบบไดนามิกโดยไม่มี TOP (@x) หากต้องการให้ส่งคืนแถวทั้งหมดหรือไม่ ฉันใช้ SQL Server 2012
13 sql-server 

7
ไม่มีใครรู้ว่าเครื่องมือนี้เรียกว่าอะไร? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา งานที่ได้ผลนั้นคลานไปพักหนึ่งในขณะที่เราพยายามหาว่าสีแดงบนหน้าปกของ Microsoft SQL Server 2012 Internals (2013, 0735658560) คืออะไร เราคิดว่ามันเป็นเครื่องมือผ่าตัดหรือเครื่องใช้ไฟฟ้าบางประเภท? คิด?
13 sql-server 

2
SELECT TOP 1 เป็นอันตรายต่อประสิทธิภาพการค้นหา มีวิธีเข้าถึง dba เพื่อเอาชนะสิ่งนี้หรือไม่
ในแอปพลิเคชันที่ใช้งานจริง (C # กำลังพูดคุยกับ SQL Server 2014 Standard) มีข้อความค้นหาที่มีลักษณะดังนี้ด้านล่าง เวลาส่วนใหญ่จะทำงานในหน่วยมิลลิวินาที แต่บางครั้ง (สำหรับค่าบางอย่าง@Id) มันจะไปถั่วและใช้เวลาประมาณหนึ่งนาที นี่เป็นเวลานานกว่าการหมดเวลาของแอปดังนั้นแอปจึงล้มเหลวสำหรับผู้ใช้ ในกรณี "go nuts" ชุดผลลัพธ์ที่ส่งคืนจะว่างเปล่าอย่างถูกต้องเนื่องจากอยู่ในหลาย ๆ กรณี แต่ไม่ใช่ทุกกรณี โชคดีที่สิ่งนี้สามารถทำซ้ำได้ทั้งในสภาพแวดล้อมการผลิตและการพัฒนา นักพัฒนาซอฟต์แวร์แจ้งว่าการลบ "TOP 1" ออกจากคำค้นหาจากนั้นตรวจสอบให้แน่ใจว่าแอปนั้นใช้แถวเพิ่มเติมของชุดผลลัพธ์เพื่อล้างปัญหาด้านประสิทธิภาพ ตัววางแผนคิวรีไม่แนะนำดัชนีเมื่อTOP 1มีอยู่ (ใน dev) กำลังเปลี่ยนคิวรีและแก้ไขแอปอยู่ในระหว่างดำเนินการ การเปิดตัวใช้เวลาสักครู่ คำถามของฉัน:มีวิธีใดบ้างที่สามารถเข้าถึง DBA ในการปรับแต่งหรือปรับแต่งอินสแตนซ์ SQL Server ที่ใช้งานได้เพื่อแก้ไขปัญหานี้ก่อนที่แอพจะเปลี่ยนด้วยการสืบค้นใหม่ SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi …

3
ไม่ได้ใช้ 512 ไบต์จากหน้าข้อมูล 8 KByte ของ SQL Server
ฉันสร้างตารางต่อไปนี้: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); จากนั้นสร้างดัชนีคลัสเตอร์: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); ต่อไปฉันเติมด้วย 30 แถวแต่ละขนาดคือ 256 ไบต์ (ตามประกาศตาราง): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO …

5
ใน SQL Server จะมีวิธีในการกำหนดค่าของพารามิเตอร์ที่ส่งผ่านไปยังกระบวนงานที่เก็บไว้
วิธีหนึ่งในการกำหนดโพรซีเดอร์ที่เก็บไว้ซึ่งเรียกใช้โพรซีเดอร์คือใช้วิธี "การจัดการแบบไดนามิก" เช่น: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext อย่างไรก็ตามสิ่งนี้จะแสดงเฉพาะข้อความของคำสั่งสร้างของโพรซีเดอร์ที่เก็บไว้ เช่น: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id เป็นการดีที่ฉันต้องการดูว่าพารามิเตอร์สำหรับกระบวนการทำงานที่ทำให้มันทำงานนานมากสำหรับชุดของพารามิเตอร์ที่ละเมิด มีวิธีทำเช่นนั้นหรือไม่? (ในคำถามนี้ Aaron Bertrandกล่าวถึงInputBuffer DBCCแต่ฉันไม่คิดว่ามันเหมาะสมสำหรับปัญหานี้)

2
กรอกข้อมูลวันที่ที่หายไปด้วยค่าข้อมูลจากวันที่ที่เติมก่อนหน้าสำหรับกลุ่ม
รูปภาพตั๋วโต๊ะช่วยเหลือที่รับถ่ายโอนระหว่างแผนกต่างๆ เราต้องการทราบว่าแผนกคืออะไรในตอนท้ายของวันสำหรับตั๋วแต่ละใบสำหรับแต่ละวันที่เปิดตั๋ว ตารางประกอบด้วยแผนกสุดท้ายสำหรับแต่ละตั๋วสำหรับแต่ละวันที่เปิดซึ่งมีการเปลี่ยนแปลงในแผนก (รวมถึงแถวสำหรับวันที่เปิดตั๋วในตอนแรกและวันที่ปิด) ตารางข้อมูลมีลักษณะดังนี้: CREATE TABLE TicketAssigment ( TicketId INT NOT NULL, AssignedDate DATE NOT NULL, DepartmentId INT NOT NULL); สิ่งที่ฉันต้องการคือการกรอกวันที่ที่ขาดหายไปสำหรับ TicketId แต่ละอันโดยใช้ DepartmentId จากแถว TicketAssigment หน้าที่แล้วเรียงลำดับตามวันที่ หากฉันมี TicketAssigment แถวเช่นนี้: 1, '1/1/2016', 123 -- Opened 1, '1,4,2016', 456 -- Transferred and closed 2, '1/1/2016', 25 -- Opened 2, '1/2/2016', …

1
ดัชนีแบบคลัสเตอร์ไม่ได้ใช้ในคำสั่งลบ
ฉันมีตาราง SQL Server ที่กำหนดดังนี้ CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] …

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

3
total_elapsed_time ใน DMV sys.dm_exec_requests ไม่ถูกต้องสมบูรณ์หรือไม่
ฉันกำลังเรียกใช้ SQL Server 2012 และพยายามรวบรวมแบบสอบถามเพื่อตรวจสอบการใช้ DMV อย่างไรก็ตามเมื่อดูที่total_elapsed_timeฟิลด์ในsys.dm_exec_requestsDMV ตัวเลขจะดูออกไป นี่คือตัวอย่าง: SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 จากการคำนวณของฉัน * เวลาที่ผ่านไปควรอยู่ที่ประมาณ 349,103 - ไม่ใช่ 1,419,976 ที่ปิดโดยเกิน 4 ปัจจัย * จากความแตกต่างเป็นมิลลิวินาทีระหว่างเวลาปัจจุบันและstart_timeคือ SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); นี่คือข้อมูลเซิร์ฟเวอร์: SELECT …

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

2
ความหลากหลายในเวลาแทรกจำนวนมาก
ดังนั้นฉันจึงมีกระบวนการแทรกจำนวนมากเพื่อนำข้อมูลจากตารางการแสดงละครของเราและย้ายไปยังดาต้ามาร์ตของเรา กระบวนการนี้เป็นงานการไหลของข้อมูลอย่างง่ายพร้อมการตั้งค่าเริ่มต้นสำหรับ "แถวต่อชุด" และตัวเลือกคือ "tablock" และ "ไม่มีข้อ จำกัด ในการตรวจสอบ" โต๊ะค่อนข้างใหญ่ 587,162,986 ที่มีขนาดข้อมูล 201GB และ 49GB ของพื้นที่ดัชนี ดัชนีคลัสเตอร์สำหรับตารางคือ CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) และคีย์หลักคือ: ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) ตอนนี้เราพบปัญหาที่BULK INSERTSSIS ทำงานช้าอย่างไม่น่าเชื่อ …

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