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

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

1
บังคับให้สปูลดัชนี
ฉันรู้ว่าบางสิ่งบางอย่างที่ควรหลีกเลี่ยงด้วยเหตุผลด้านประสิทธิภาพ แต่ฉันกำลังพยายามแสดงสภาพที่มันปรากฏเป็นตัวอย่างในการทำให้แน่ใจว่ามันจะไม่ปรากฏขึ้น อย่างไรก็ตามฉันท้ายด้วยคำเตือนดัชนีที่ขาดหายไป แต่เครื่องมือเพิ่มประสิทธิภาพเลือกที่จะไม่สร้างดัชนีชั่วคราว แบบสอบถามที่ฉันใช้คือ SELECT z.a FROM dbo.t5 AS z WITH(INDEX(0)) WHERE EXISTS ( SELECT y.a FROM dbo.t4 AS y WHERE y.a = z.a ) OPTION (MAXDOP 1); แผนผังตารางคือ: CREATE TABLE dbo.t4 ( a integer NULL, b varchar(1000) NULL, p varchar(100) NULL ); CREATE TABLE dbo.t5 ( a integer …

3
ปรับปรุงประสิทธิภาพของการสืบค้นโดยใช้ IN ()
ฉันมีแบบสอบถาม SQL ต่อไปนี้: SELECT Event.ID, Event.IATA, Device.Name, EventType.Description, Event.Data1, Event.Data2 Event.PLCTimeStamp, Event.EventTypeID FROM Event INNER JOIN EventType ON EventType.ID = Event.EventTypeID INNER JOIN Device ON Device.ID = Event.DeviceID WHERE Event.EventTypeID IN (3, 30, 40, 41, 42, 46, 49, 50) AND Event.PLCTimeStamp BETWEEN '2011-01-28' AND '2011-01-29' AND Event.IATA LIKE '%0005836217%' ORDER …

1
PostgreSQL: สิทธิ์ถูกปฏิเสธเนื่องจากมีความเกี่ยวข้อง
ฉันสับสนเกี่ยวกับการตั้งค่าสิทธิ์ใน PostgreSQL ฉันมีบทบาทเหล่านี้: List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- admin | Superuser, Create role, Create DB, Replication | {} meltemi | Create role, Create DB | {rails} rails | Create DB, Cannot login | {} myapp | | {rails} และฐานข้อมูล: List of databases Name | …

2
การปรับประสิทธิภาพสำหรับตารางขนาดใหญ่ (SQL Server 2008 R2)
ข้อมูลประกอบ: ฉันมีตารางความจริงในระยะเอือด วัตถุประสงค์ในการโหลดข้อมูล 5 ปีใน Prod (คาดว่าจะมีขนาด 400 ล้านระเบียน) ขณะนี้มีข้อมูลทดสอบเพียง 2 ปี คุณสมบัติตาราง: ไม่มีขนาด ~ 45 มาตรการ ~ 30 มาตรการที่ไม่ใช่สารเติมแต่งและคอลัมน์อื่น ๆ ~ 25 ขนาดข้อมูลปัจจุบัน ~ 200 ล้าน (ข้อมูล 2 ปี) มุมมองเวลา: มุมมองเดือนที่แตกต่างกัน 3 แบบ: การคลัง / ปฏิทิน / ปรับ (เช่นแถวเดียวกันอาจอยู่ในเดือนที่ต่างกันโดยขึ้นอยู่กับว่ามุมมองใดที่กำลังมองหา) ผู้ใช้ต้องเรียกดูครั้งละหนึ่งมุมมอง (เช่น. จะมีการใช้คอลัมน์เดือนเดียวเท่านั้นในแบบสอบถามซึ่งจะทำให้เราต้องทำการแบ่งพาร์ติชันตามเวลา) ดัชนี: 1 ดัชนีกลุ่มบนคีย์ธรรมชาติ (8 คอลัมน์) สร้างขึ้น 3 …

1
ฉันสามารถสอบถามไฟล์ที่คั่นด้วยแท็บจาก SSMS ได้หรือไม่
เป็นไปได้หรือไม่ที่จะสืบค้นไฟล์ที่คั่นด้วยแท็บจาก Sql Server Management Studio เพื่อดูข้อมูลโดยไม่บันทึกที่ใดก็ได้ ฉันรู้ว่าคุณสามารถBULK INSERTจากไฟล์ที่คั่นด้วยแท็บโดยใช้สิ่งที่ชอบ: BULK INSERT SomeTable FROM 'MyFile.txt' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'); อย่างไรก็ตามคุณต้องทราบคอลัมน์ล่วงหน้าและสร้างตารางเพื่อเก็บข้อมูล ฉันรู้ว่าคุณสามารถสืบค้นไฟล์ประเภทอื่นเช่น CSV หรือ Excel ได้โดยไม่ต้องกำหนดคอลัมน์ล่วงหน้าโดยใช้OPENROWSETและไดรเวอร์ Excel เช่น: -- Query CSV SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text;Database=\\Server\Folder\;HDR=Yes;', 'SELECT * FROM MyFile.csv') -- Query Excel SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'Excel 8.0;Database=MyFile.xls', …

1
วิธีการกำหนดจุดที่น่าสนใจระหว่างขนาดพูลและการเชื่อมต่อฐานข้อมูลใน PostgreSQL
เราประสบปัญหาในการจัดการทราฟฟิกในช่วงชั่วโมงเร่งด่วนไปยังเซิร์ฟเวอร์ฐานข้อมูลของเรา เรากำลังมองหาการปรับปรุงฮาร์ดแวร์ (ดูคำถามนี้เกี่ยวกับสิ่งต่าง ๆ ด้านข้างนั้น ) แต่เราต้องการทำงานกับการกำหนดค่าการรวมกำไรและการปรับแต่งเซิร์ฟเวอร์ แอปพลิเคชั่นที่เรากำลังทำอยู่นั้นเป็นเกมแบบผู้เล่นหลายคนเทิร์นเบสสำหรับสมาร์ทโฟนโดยแบ็กเอนด์ประกอบด้วยRails ที่มียูนิคอร์นและPostgreSQL 9.1เป็นฐานข้อมูล ขณะนี้เรามีผู้ใช้งานที่ลงทะเบียนแล้ว 600,000 คนและเนื่องจากสถานะเกมถูกเก็บไว้ในฐานข้อมูลหลายพันการเขียนจะทำทุกสองสามวินาที เราได้วิเคราะห์ล็อกไฟล์จากPostgreSQLโดยใช้PgBadgerและในช่วงเวลาวิกฤติที่เราได้รับจำนวนมาก FATAL: remaining connection slots are reserved for non-replication superuser connections วิธีการแก้ปัญหาไร้เดียงสาไปที่เคาน์เตอร์ปัญหานี้จะเพิ่มmax_connections (ซึ่งปัจจุบันคือ 100) ใน postgresql.conf ฉันได้อ่านhttp://wiki.postgresql.org/wiki/Number_Of_Database_Connectionsซึ่งแสดงว่านี่อาจไม่ใช่สิ่งที่ถูกต้อง ในบทความดังกล่าวข้างต้นก็เรียกหาจุดหวานระหว่าง max_connections และขนาดสระว่ายน้ำ สิ่งที่สามารถทำได้เพื่อหาจุดหวานนี้ มีเครื่องมือที่ดีในการวัดประสิทธิภาพ I / O สำหรับค่าต่าง ๆ ของmax_connectionsและขนาดพูลหรือไม่? การตั้งค่าปัจจุบันของเราคือเซิร์ฟเวอร์เกม 4 ตัวแต่ละตัวมียูนิคอร์น 16 คนและขนาดพูล 5 นี่คือการตั้งค่า postgres-settings ที่ไม่ใช่ค่าเริ่มต้นที่เราใช้: …
14 postgresql 

2
Oracle PL / SQL มีรูทีน ASSERT มาตรฐานหรือไม่
ฉันต้องการใช้รูทีน ASSERT ที่ใช้งานได้คล้ายกับที่พบในภาษาอื่น ๆ เช่นโครงสร้าง (ไม่ว่าจะเป็นขั้นตอนไวยากรณ์ ... ) ASSERT( <condition>, <msg>) เช่นนั้นเมื่อ<condition>ผ่านในอาร์กิวเมนต์แรกเป็นเท็จข้อยกเว้นจะถูกยกขึ้นด้วย<msg>ข้อความอธิบายที่ระบุ ฉันรู้ว่านี่เป็นเรื่องเล็กน้อยที่จะต้องทำด้วยมือ แต่ฉันถามว่ามีมาตรฐานที่ได้รับจาก DBMS หรือไม่ ต้องเขียนหนึ่งของฉันเองหรือนำเข้าจากแพ็คเกจของบุคคลที่สามจะไม่สามารถทำได้เนื่องจากฉันต้องการให้พกพาได้อย่างสมบูรณ์และโปร่งใสสำหรับทุกโครงการที่ฉันกำลังทำอยู่

1
เหตุใดสี“ การค้นหา” จึงเป็นคำที่สงวนไว้ของฟังก์ชันใน SQL Server
ใน SSMS 2208 ตัวระบุ "ค้นหา" เป็นสีชมพูร้อนราวกับว่ามันเป็นฟังก์ชั่น (สีเดียวกับที่พูดว่า "พลังงาน" หรือ "แปลง") ทำไม? ฉันไม่สามารถหาได้ในรายการอย่างเป็นทางการของคำสงวน การค้นหาบนเว็บดูเหมือนไร้ประโยชน์เพราะมีคำศัพท์ "ค้นหา" ที่น่ากลัวมากมายซึ่งไม่เกี่ยวข้องกับคำถามของฉัน

2
รายการการเข้าสู่ระบบเซิร์ฟเวอร์ SQL ที่มีอยู่และผู้ใช้
ฉันรู้ว่าเราสามารถตรวจสอบการเข้าสู่ระบบและผู้ใช้ที่กำหนดโดยใช้ GUI ใน SQL Server แต่ฉันสงสัยว่าเราสามารถตรวจสอบนี้ได้โดยใช้สคริปต์ ฉันเรียกใช้แบบสอบถามด้านล่าง แต่แสดงให้เห็นว่า Principal_id ซึ่งฉันไม่แน่ใจว่าจะแมปอย่างไรเพื่อรับระดับสิทธิ์ SELECT * FROM Sys.login_token ดังนั้นจึงมี proc ที่เก็บไว้ในตัวที่สามารถแสดงรายการการเข้าสู่ระบบและผู้ใช้ที่มีระดับสิทธิ์ของพวกเขา ? ขอขอบคุณ.

3
ฉันสามารถเชื่อมต่อกับอินสแตนซ์ SQL Server 2000 จาก SQL Server Management Studio 2012 ได้หรือไม่
ฉันต้องการอัปเดตเครื่องพัฒนาเป็น SQL Server 2012 แต่ฉันยังคงจัดการกับเครื่อง SQL Server 2000 (เก่ามาก) บางเครื่อง SSMS 2012 ของฉันสามารถเชื่อมต่อกับเครื่อง SQL Server 2000 ได้ไหม SQL Server 2008 R2 ทำงานได้ดี (สิ่งที่ฉันมีตอนนี้)

4
เป็นไปได้ไหมที่จะเพิ่มประสิทธิภาพการสืบค้นในตารางแคบ ๆ ที่มีแถวนับล้านแถว
ฉันมีข้อความค้นหาที่ใช้เวลาโดยเฉลี่ย 2,500 มิลลิวินาทีในการดำเนินการให้เสร็จสมบูรณ์ ตารางของฉันแคบมาก แต่มี 44 ล้านแถว ฉันมีตัวเลือกอะไรบ้างในการปรับปรุงประสิทธิภาพหรือตัวเลือกนี้ดีเท่าที่ได้รับ คำค้นหา SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; โต๊ะ CREATE TABLE [dbo].[Heartbeats]( [ID] [int] IDENTITY(1,1) NOT NULL, [DeviceID] [int] NOT NULL, [IsPUp] [bit] NOT NULL, [IsWebUp] [bit] NOT NULL, [IsPingUp] [bit] NOT NULL, [DateEntered] [datetime] NOT NULL, …

3
ดิสก์ระบบมีเนื้อที่ไม่เพียงพอเมื่อเรียกใช้แบบสอบถาม SQL จำนวนมากใน SQL Server 2012
ฉันค่อนข้างใหม่กับ SQL Server 2012 ฉันจะขอบคุณถ้ามีคนช่วย ฉันกู้คืนสำเนาของฐานข้อมูลขนาดใหญ่เป็น SQL Server 2012 และฉันพยายามเรียกใช้แบบสอบถามแบบง่าย ๆ ฉันพยายามเรียกใช้แบบสอบถามแบบใช้เลือกข้อมูลกับตารางของฐานข้อมูล136898115บรรทัด SELECTแบบสอบถามนี้มีWHEREข้อง่าย ๆเท่านั้น ทุกครั้งที่ฉันเรียกใช้คิวรีนี้มันล้มเหลวเพราะดิสก์ของระบบ (พาร์ติชันที่ติดตั้ง Windows - C:\) หมดพื้นที่ (พาร์ติชันนี้มีพื้นที่ว่างเพียง 6GB) และฉันไม่เข้าใจว่าทำไม ฉันกำหนด tempdb ของฉันให้อยู่ในไดรฟ์อื่นซึ่งมีพื้นที่ว่างมากกว่า 14 เทราไบต์ แน่นอนว่าฐานข้อมูลของฉันอยู่ในไดรฟ์อื่นเช่นกัน อะไรทำให้พาร์ติชั่นระบบของฉันไม่มีที่ว่าง? มันเป็นไฟล์หน้าหรือไม่

1
ฉันจะทราบได้อย่างไรว่า * ทำไม * ผู้ใช้มีสิทธิ์ที่มีประสิทธิภาพบางอย่าง
ฉันรู้ว่าฉันสามารถสอบถามสิทธิ์ที่มีประสิทธิภาพโดยใช้sys.fn_my_permissions: USE myDatabase; SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name ------------------------------------------------ dbo.myTable | | SELECT dbo.myTable | | UPDATE ... สิ่งนี้บอกฉันว่าผู้ใช้ปัจจุบันมีสิทธิ์ SELECT, INSERT, UPDATE และอื่น ๆmyTableในฐานข้อมูลmyDatabaseหรือไม่ เป็นไปได้ไหมที่จะค้นหาสาเหตุที่ผู้ใช้มีสิทธิ์เหล่านี้อย่างง่ายดาย ตัวอย่างเช่นฉันชอบมีฟังก์ชันfn_my_permissions_exที่แสดงreasonคอลัมน์เพิ่มเติม: USE myDatabase; SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name | reason ------------------------------------------------------------------------------------------------------------------------------------ dbo.myTable | | SELECT …

3
แบบสอบถาม SQL Server ช้าเมื่อแบ่งหน้า
ฉันเห็นพฤติกรรมแปลก ๆ ด้วยแบบสอบถาม T-SQL ต่อไปนี้ใน SQL Server 2012: SELECT Id FROM dbo.Person WHERE CONTAINS(Name, '"John" AND "Smith"') ORDER BY Name การดำเนินการค้นหานี้เพียงอย่างเดียวทำให้ฉันมีผลลัพธ์ประมาณ 1,300 รายการในเวลาน้อยกว่าสองวินาที (มีดัชนี fulltext เปิดอยู่Name) อย่างไรก็ตามเมื่อฉันเปลี่ยนแบบสอบถามเป็น: SELECT Id FROM dbo.Person WHERE CONTAINS(Name, '"John" AND "Smith"') ORDER BY Name OFFSET 0 rows FETCH NEXT 10 ROWS ONLY ใช้เวลามากกว่า 20 วินาทีในการให้ผลลัพธ์ …

5
ปรับปรุงประสิทธิภาพของ sys.dm_db_index_physical_stats
ในระหว่างงานซ่อมบำรุงฉันพยายามหารายการดัชนีแยกส่วน แต่แบบสอบถามช้ามากและใช้เวลากว่า 30 นาทีในการดำเนินการ ฉันคิดว่านี่เป็นเพราะการสแกนระยะไกลบน sys.dm_db_index_physical_stats มีวิธีใดบ้างที่จะเพิ่มความเร็วคิวรีต่อไปนี้: SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC ฉันไม่ใช่ DBA และอาจทำให้เกิดข้อผิดพลาดอย่างชัดเจนในแบบสอบถามด้านบนหรืออาจมีดัชนีหรือสถิติบางอย่างที่จะช่วยได้ บางทีมันอาจเป็นเพียงขนาดของฐานข้อมูล …

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