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

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

3
เหตุใดเครื่องมือเพิ่มประสิทธิภาพจึงเลือกดัชนีที่เป็นกลุ่ม + เรียงลำดับแทนที่จะเป็นดัชนีที่ไม่ได้ทำคลัสเตอร์
รับตัวอย่างถัดไป: IF OBJECT_ID('dbo.my_table') IS NOT NULL DROP TABLE [dbo].[my_table]; GO CREATE TABLE [dbo].[my_table] ( [id] int IDENTITY (1,1) NOT NULL PRIMARY KEY, [foo] int NULL, [bar] int NULL, [nki] int NOT NULL ); GO /* Insert some random data */ INSERT INTO [dbo].[my_table] (foo, bar, nki) SELECT TOP (100000) ABS(CHECKSUM(NewId())) …

2
เมื่อจะใช้ 'nvarchar / nchar' กับ SQL Server 2019?
กับ SQL Server 2019 ไมโครซอฟท์เปิดตัวสนับสนุน UTF-8สำหรับCHARและVARCHARชนิดข้อมูลและพูดว่า: คุณสมบัตินี้อาจช่วยประหยัดพื้นที่เก็บข้อมูลได้อย่างมากทั้งนี้ขึ้นอยู่กับชุดอักขระที่ใช้งาน ตัวอย่างเช่นการเปลี่ยนชนิดข้อมูลคอลัมน์ที่มีอยู่ด้วยสตริง ASCII จาก NCHAR (10) เป็น CHAR (10) โดยใช้การเปรียบเทียบการเปิดใช้งาน UTF-8 แปลเป็นความต้องการหน่วยเก็บข้อมูลลดลงเกือบ 50% การลดลงนี้เป็นเพราะ NCHAR (10) ต้องการ 22 ไบต์สำหรับการจัดเก็บในขณะที่ CHAR (10) ต้องการ 12 ไบต์สำหรับสายอักขระ Unicode เดียวกัน ดูเหมือนว่า UTF-8 จะรองรับทุกสคริปต์ดังนั้นโดยทั่วไปเราสามารถเริ่มเก็บข้อมูล Unicode ในvarcharและcharคอลัมน์ และตามที่ได้กล่าวไว้ในเอกสารแล้วสิ่งนี้สามารถลดขนาดของตารางและดัชนีและจากนั้นเราจะได้ประสิทธิภาพที่ดียิ่งขึ้นเนื่องจากอ่านข้อมูลในปริมาณที่น้อยลง ฉันสงสัยว่านี่หมายความว่าเราสามารถหยุดใช้nvarcharและncharคอลัมน์ที่ใช้ UTF-16 หรือไม่ ใครสามารถชี้สถานการณ์และเหตุผลที่จะไม่ใช้ชนิดข้อมูลถ่านด้วยการUTFเข้ารหัสและใช้ n-chars ต่อไปได้?

1
ควรใช้หลายตารางใน DynamoDB เมื่อใด
แนวทางปฏิบัติที่ดีที่สุดของ DyanmoDB ทำให้ชัดเจนว่า: คุณควรดูแลตารางให้น้อยที่สุดเท่าที่จะทำได้ในแอปพลิเคชั่น DynamoDB แอปพลิเคชันที่ออกแบบมาอย่างดีส่วนใหญ่ต้องการเพียงตารางเดียว ฉันพบว่ามันน่าขบขันที่ทุกบทช่วยสอนที่ฉันเห็นเกี่ยวกับ DyanmoDB นั้นมีการออกแบบหลายตาราง แต่สิ่งนี้หมายความว่าในทางปฏิบัติ? ลองพิจารณาแอปพลิเคชันอย่างง่ายที่มีเอนทิตีหลักสามประการ: ผู้ใช้โครงการและเอกสาร ผู้ใช้เป็นเจ้าของหลายโครงการและโครงการสามารถมีเอกสารหลายฉบับ โดยทั่วไปเราจะต้องค้นหาโครงการสำหรับผู้ใช้และเอกสารสำหรับโครงการ อ่านมากกว่าจำนวนที่เขียนโดยระยะขอบที่สำคัญ การออกแบบตารางการสอนที่ไร้เดียงสาจะใช้สามตาราง: Users Hash key user-id Projects Hash key Global Index project-id user-id Documents Hash key Global Index document-id project-id เราสามารถยุบได้ง่ายProjectและDocumentอยู่ในDocumentsตารางเดียว: Documents Hash key Sort key Global Index project-id document-id user-id แต่ทำไมหยุดอยู่ตรงนั้นล่ะ? ทำไมไม่โต๊ะเดียวที่จะปกครองพวกเขาทั้งหมด? เนื่องจากUserเป็นรากของทุกสิ่ง ... Users …

2
MongoDB สิ้นสุดลงเมื่อหน่วยความจำไม่เพียงพอ
ฉันมีการกำหนดค่าต่อไปนี้: เครื่องโฮสต์ที่รันคอนเทนเนอร์ docker สามตัว: MongoDB Redis โปรแกรมที่ใช้สองคอนเทนเนอร์ก่อนหน้าเพื่อจัดเก็บข้อมูล ทั้ง Redis และ MongoDB ใช้เพื่อจัดเก็บข้อมูลจำนวนมาก ฉันรู้ว่า Redis ต้องการเก็บข้อมูลทั้งหมดไว้ใน RAM และฉันก็โอเคกับเรื่องนี้ น่าเสียดายสิ่งที่เกิดขึ้นคือ mongo เริ่มใช้ RAM เป็นจำนวนมากและทันทีที่โฮสต์ RAM เต็ม (เรากำลังพูดถึง 32GB ที่นี่) ไม่ว่าจะเกิดจาก mongo หรือ Redis ฉันได้อ่านคำถามก่อนหน้านี้เกี่ยวกับเรื่องนี้: จำกัด การใช้ RAM MongoDB : ดูเหมือนว่า RAM ส่วนใหญ่จะถูกใช้โดยแคช WiredTiger หน่วยความจำที่ จำกัด MongoDB : ที่นี่เห็นได้ชัดว่าปัญหาคือข้อมูลบันทึก จำกัด การใช้หน่วยความจำ RAM ใน …

1
อะไรคือความแตกต่างระหว่างผู้ใช้ `dbo 'และเจ้าของฐานข้อมูลที่เก็บไว้ใน sys.database
เราเพิ่งมีคำถามเกิดขึ้นที่ผู้ใช้dboในฐานข้อมูลมีsidที่ไม่ตรงกับในowner_sid sys.databasesฉันเข้าใจว่าเจ้าของฐานข้อมูลแตกต่างจากสมาชิกของบทบาทอย่างไรdb_ownerแต่ฉันคิดเสมอว่าผู้ใช้dboนั้นเป็นเจ้าของฐานข้อมูลจริง นั่นไม่ใช่กรณีหรือไม่ และถ้าเป็นเช่นนั้นมีความแตกต่างที่แท้จริงระหว่างdboและมีอะไรsys.databasesบ้าง?

3
ใช้ธีมมืดในตารางผลลัพธ์ SSMS, Object Explorer และหน้าต่างอื่น ๆ
มีหลายวิธีในการใช้ Dark Theme บนหน้าต่างการเข้ารหัสหลักของ SSMS ไม่ว่าจะเป็นการอิมพอร์ตไฟล์ vsettings โดยใช้ Dark Theme ที่ปิดการใช้งานในไฟล์ config หรือทำด้วยตนเอง แต่ตัวเลือกเหล่านั้นจะไม่ส่งผลต่อ Grid Results, Object Explorer และหน้าต่างอื่น ๆ 2 เหล่านั้นเป็นตัวหลักที่ฉันใช้นอกเหนือจากการเข้ารหัส ฉันพยายามปกติเครื่องมือ> ตัวเลือก> สิ่งแวดล้อม> แบบอักษรและสีแล้วเลือกบนกล่องคำสั่งผสมแสดงการตั้งค่าสำหรับ:ตัวเลือกผลการค้นหากริดและการใช้สีขาวสำหรับรายการเบื้องหน้าและสีดำสำหรับพื้นหลังรายการ บันทึกแล้วเริ่ม SSMS ใหม่ แต่ข้อความเป็นสีขาวพื้นหลังยังคงเป็นสีขาว มีความคิดเกี่ยวกับสิ่งที่เกิดขึ้นหรือจะทำอย่างไร? ฉันหาวิธีแก้สำหรับ Object Explorer ไม่ได้

2
วิธีการเปลี่ยนฐานข้อมูลแบบไดนามิกโดยใช้ TSQL
ฉันมีปัญหากับการพยายามเปลี่ยนบริบทของ SSMS เป็นฐานข้อมูลที่ระบุใน SQL แบบไดนามิก: EXEC sys.sp_executesql N'USE db1 ' ; สามารถดำเนินการได้สำเร็จ แต่บริบทฐานข้อมูลของ SSMS จะไม่เปลี่ยนแปลง ฉันได้ลองปรับเปลี่ยนเล็กน้อยตามข้างบน DECLARE @sql NVARCHAR(100) DECLARE @db NVARCHAR(50) SET @db = N'db1' SET @sql = N'Use ' + @db EXEC sp_executesql @sql ดำเนินการสำเร็จอีกครั้ง แต่ฐานข้อมูลไม่เปลี่ยนแปลง

3
SQL Server แทรกเข้าไป - วิธีการระบุคอลัมน์ที่ทำให้เกิดข้อผิดพลาดการตัด
ฉันมีขั้นตอนการจัดเก็บที่แทรก 650 ฟิลด์ลงในตาราง การแทรกล้มเหลวด้วยข้อผิดพลาดการตัด มันง่ายมาก INSERT INTO SELECT (a bunch of fields) FROM (a bunch of tables) ด้านล่างนี้เป็นข้อความแสดงข้อผิดพลาด: ข่าวสารเกี่ยวกับ 8152, ระดับ 16, สถานะ 14, กระบวนงาน DSP_Procedure, สาย 1075 สายอักขระหรือข้อมูลไบนารีจะถูกตัดทอน มีวิธีที่รวดเร็วที่ฉันสามารถระบุฟิลด์ที่ทำให้เกิดข้อผิดพลาดการตัด? ความจริงที่ว่าคำสั่ง select ที่จะแทรกลงในตารางมี 650 ฟิลด์ทำให้ยากที่จะระบุว่าฟิลด์ใดที่ทำให้เกิดข้อผิดพลาดการตัด ฉันคิดว่าฉันสามารถแสดงความคิดเห็นบล็อกของเขตข้อมูลได้ครั้งละหนึ่งครั้งเพื่อให้มีการแทรก SP เพียง 100 ครั้งในแต่ละครั้งจากนั้นจึงเรียกใช้ SP 6 หรือ 7 ครั้งที่แตกต่างกันจนกว่าฉันจะแคบลงอย่างน้อย 100 กลุ่ม ที่จะมีฟิลด์ที่ทำให้เกิดข้อผิดพลาดการตัด อีกทางหนึ่งฉันคิดว่าบางทีฉันสามารถSELECT INTOสร้างตารางใหม่และเปรียบเทียบความยาวข้อมูลในตารางเทียบกับความยาวข้อมูลของตารางเป้าหมายที่ฉันพยายามแทรกลงใน …

4
วิธีสร้างแถวสำหรับทุกวันในช่วงวันที่โดยใช้กระบวนงานที่เก็บไว้ได้อย่างไร
ฉันต้องการสร้างกระบวนงานที่เก็บไว้ซึ่งจะสร้างแถวในตารางสำหรับทุกวันในช่วงวันที่ที่กำหนด กระบวนงานที่เก็บไว้ยอมรับสองอินพุต - วันที่เริ่มต้นและวันที่สิ้นสุดของช่วงวันที่ที่ผู้ใช้ต้องการ ดังนั้นสมมติว่าฉันมีตารางดังนี้ SELECT Day, Currency FROM ConversionTable Day คือ DateTime และ Currency เป็นเพียงจำนวนเต็ม เพื่อให้ง่ายขึ้นสมมติว่าฉันต้องการให้คอลัมน์สกุลเงินเป็น 1 สำหรับแต่ละแถวที่แทรกเหล่านี้ ดังนั้นหากมีคนป้อน '5 มีนาคม 2017' เป็นวันที่เริ่มต้นและ '11 เมษายน 2017' เป็นวันที่สิ้นสุดฉันต้องการสร้างแถวต่อไปนี้: 2017-03-05 00:00:00, 1 2017-03-06 00:00:00, 1 ... 2017-04-11 00:00:00, 1 วิธีที่ดีที่สุดในการเขียนโค้ดของกระบวนงานที่เก็บไว้เพื่อทำสิ่งนี้คืออะไร ฉันใช้ SQL Server 2008 R2 ในสภาพแวดล้อมการทดสอบของฉัน แต่สภาพแวดล้อมจริงของเราใช้ SQL Server 2012 ดังนั้นฉันสามารถอัพเกรดเครื่องทดสอบของฉันได้หากมีฟังก์ชั่นใหม่ที่เปิดตัวในปี …

1
รีเฟรชมุมมองที่เป็นรูปธรรมของ PostgreSQL โดยอัตโนมัติโดยไม่ต้องใช้ทริกเกอร์
ฉันสร้างมุมมองที่มีชื่อปรากฏบนโต๊ะห่อหุ้มข้อมูลต่างประเทศview_table_A สิ่งที่ฉันต้องการสำหรับมุมมองที่จะได้รับการปรับปรุงโดยอัตโนมัติทุกครั้งหลังใส่ใหม่table_A table_Aฉันพยายามทำสิ่งนี้ด้วยทริกเกอร์ แต่มันไม่ทำงาน เป็นไปได้ไหมที่จะรีเฟรชมุมมองที่ปรากฏขึ้นโดยอัตโนมัติโดยไม่ใช้ทริกเกอร์

2
ฐานข้อมูลอัปเดตดัชนีในธุรกรรม ณ จุดใด
ฉันพยายามที่จะเข้าใจลำดับของเหตุการณ์ในส่วนแทรกที่ทั้งดัชนีและธุรกรรมเกี่ยวข้องกัน ตัวอย่างเช่นสถานะเอกสารของ Oracle: หากคุณสร้าง [หรือมี] ดัชนีอย่างน้อยหนึ่งรายการก่อนที่จะโหลดข้อมูลฐานข้อมูลจะต้องอัปเดตทุกดัชนีเมื่อแทรกแต่ละแถว แต่จะเกิดอะไรขึ้นถ้าฉันสร้างธุรกรรมแทรกห้าแถวจากนั้นส่งมอบ? มีการอัพเดตดัชนีสำหรับทุกส่วนแทรกหรือเพียงจุดที่กำหนดไว้หรือไม่ ลอจิกบอกฉันว่าพวกเขาจะได้รับการอัปเดต ณ จุดส่งมอบเท่านั้นเนื่องจากดัชนีที่อัพเดตไม่สามารถใช้งานได้จนกว่าจะมีการบันทึกข้อมูลเหล่านั้น แต่นั่นเป็นเรื่องจริงหรือ ถ้าเป็นเช่นนั้นเมื่อฉันมีการแทรก 1m แถวเพื่อประสิทธิภาพที่ดีที่สุดฉันควรทำคอมมิชชันขนาดใหญ่ของแถวทั้งหมดและไม่ใช่ 10 ทรานแซคชันของระเบียน 100k แน่นอนฉันตระหนักว่าความเสี่ยงนี้ย้อนกลับมากขึ้นถ้าแถว 999,999 ล้มเหลว ขอโทษถ้าคำศัพท์ของฉันออกมาเล็กน้อย ฉันไม่ได้เป็น DBA โดยการค้าขาย ฉันไม่ได้สนใจในฐานข้อมูลเฉพาะมากเท่าฐานข้อมูลโดยทั่วไปถึงแม้ว่า Oracle และ Postgres เป็นสิ่งที่ฉันใช้มากที่สุด ฉันค้นหาในหัวข้อนี้ แต่ไม่พบคำตอบที่ชัดเจนจริงๆ

2
ฐานข้อมูลหลักเสียหายอินสแตนซ์จะไม่เริ่ม - ตัวเลือกของฉันคืออะไร
ช่วยด้วย! ฐานข้อมูลหลักของฉันเสียหายฉันไม่สามารถนำอินสแตนซ์ SQL ออนไลน์มาใช้ได้! ตัวเลือกของฉันคืออะไรในการทำให้เซิร์ฟเวอร์สำรอง ฉันมีการสำรองข้อมูลของมาสเตอร์ แต่หน้า MSDN "การกู้คืนฐานข้อมูลหลัก"ขอให้ฉันเริ่มอินสแตนซ์ในโหมดผู้ใช้คนเดียวซึ่งฉันทำไม่ได้! (หมายเหตุ: ฉันทิ้งคำถามนี้ไว้โดยไม่ระบุว่าเป็นเวอร์ชัน SQL เพื่ออ้างอิงที่ใช้กันอย่างแพร่หลายมากขึ้นมีคำถามที่คล้ายกันใน DBA.SE แต่ไม่มีใครที่เกี่ยวข้องกับเซิร์ฟเวอร์ไม่สามารถเริ่มต้นได้)

5
วิธีตรวจสอบว่ามีการติดตั้งโปรแกรมฐานข้อมูลใดบนเซิร์ฟเวอร์ DataBase ที่ฉันมี acces ให้เรียกใช้แบบสอบถาม
ฉันต้องการตรวจสอบประเภทของ sql ที่กำลังทำงานอยู่บนเซิร์ฟเวอร์ Datasase ที่ฉันสามารถเข้าถึงได้ ฉันมีสิทธิ์เข้าถึงเว็บอินเตอร์เฟสและรายการตารางเท่านั้น ผ่านอินเทอร์เฟซฉันสามารถเรียกใช้แบบสอบถามบนตารางที่มีอยู่ในรายการ ฉันจะรับข้อมูลเพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์และรุ่นที่เซิร์ฟเวอร์ใช้งานอยู่ได้อย่างไร ฉันไม่รู้เกี่ยวกับ IP หรือ PORT ที่เซิร์ฟเวอร์กำลังทำงาน ฉันต้องการทราบว่าเซิร์ฟเวอร์นั้นเป็น MySQL, Mircosoft SQL Server, Oracle SQL, Postgre SQL หรือเซิร์ฟเวอร์ sql อื่น ๆ เว็บไซต์ที่ผมพูดถึงเป็นหนึ่งในนี้: w3schools.com SQL แก้ไข แก้ไข 2: สำหรับบางคำสั่ง select sqlite_version () ใช้งานได้สำหรับฉันมันไม่ทำงาน นี่คือภาพหน้าจอของการตอบสนอง แก้ไข 3: บน Chromium Browser คำสั่งทำงานได้อย่างถูกต้อง อย่างไรก็ตามใน Firefox Browser คำสั่งไม่ทำงาน ฉันยังพูดถึงว่าฉันใช้ Linux …

2
ไม่สามารถเริ่ม SQL Server บน Ubuntu 16.04
ฉันมี SQL Server v.Next ตัวอย่างสาธารณะบนเครื่อง Ubuntu 16.04 ที่ติดตั้งและทำงานเมื่อวานนี้ แต่มันไม่ทำงานวันนี้ รับข้อผิดพลาดด้านล่าง: root @ OraServer: / var / opt / mssql / log # systemctl สถานะ mssql-server ● mssql-server.service - โปรแกรมฐานข้อมูล Microsoft (R) SQL Server (R) โหลดแล้ว: โหลดแล้ว (/lib/systemd/system/mssql-server.service; เปิดใช้งาน; ตั้งไว้ล่วงหน้าของผู้ขาย: เปิดใช้งาน) ใช้งานอยู่: ไม่ทำงาน (ไม่ทำงาน) (ผลลัพธ์: exit-code) ตั้งแต่วันอาทิตย์ 2016-11-27 13:34:23 IST; 18 …

1
จำนวนขั้นตอนฮิสโตแกรมมีการตัดสินใจในสถิติอย่างไร
จำนวนขั้นตอนฮิสโตแกรมมีการตัดสินใจในสถิติใน SQL Server อย่างไร ทำไมถึง จำกัด เพียง 200 ขั้นตอนถึงแม้ว่าคอลัมน์หลักของฉันมีค่าแตกต่างกันมากกว่า 200 ค่า มีปัจจัยในการตัดสินใจหรือไม่? การสาธิต นิยามสคีมา CREATE TABLE histogram_step ( id INT IDENTITY(1, 1), name VARCHAR(50), CONSTRAINT pk_histogram_step PRIMARY KEY (id) ) การแทรก 100 บันทึกลงในตารางของฉัน INSERT INTO histogram_step (name) SELECT TOP 100 name FROM sys.syscolumns การอัปเดตและตรวจสอบสถิติ UPDATE STATISTICS histogram_step WITH fullscan DBCC …

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