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

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

2
ป้องกัน PostgreSQL ไม่ให้เริ่มการบูทใน Ubuntu
ฉันใช้ PostgreSQL 9.2 และทำงานโดยอัตโนมัติเมื่อฉันเริ่มระบบ (Kubuntu) ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร ฉันต้องเริ่มด้วยตนเองและฉันไม่ต้องการให้เริ่มต้นแบบอัตโนมัติเพราะต้องดูที่คอนโซล

2
หลักการฐานข้อมูลเป็นเจ้าของสกีมาในฐานข้อมูลและไม่สามารถทิ้งข้อความได้
ฉันพยายามลบหลักการจากฐานข้อมูล แต่ไม่สามารถทำได้เพราะเป็นเจ้าของสคีมา อย่างไรก็ตามเมื่อฉันไปแก้ไขผู้ใช้กล่องเพื่อยกเลิกการเลือก schemae นั้นเป็นสีน้ำเงินและไม่สามารถเคลื่อนย้ายได้ ฉันจะลบหลักการออกจากสกีมาเหล่านี้ได้อย่างไร

7
การคำนวณการใช้พื้นที่ดิสก์ต่อฐานข้อมูล MySQL
ขณะนี้ฉันกำลังใช้ data_schema.TABLES เพื่อคำนวณการใช้พื้นที่ดิสก์ทั้งหมดที่จัดกลุ่มตามชื่อฐานข้อมูล แต่กำลังทำงานช้ามาก บนเซิร์ฟเวอร์ที่มีฐานข้อมูลนับร้อยอาจใช้เวลาในการคำนวณนาที วิธีที่เร็วที่สุดในการคำนวณการใช้พื้นที่ดิสก์ด้วยฐานข้อมูลคืออะไร ฉันควรจะดูที่ระบบไฟล์หรือไม่ มีวิธีในการเร่งความเร็ว data_schema หรือไม่
28 mysql 

2
ทำไมเราต้องสร้างและจัดระเบียบดัชนีใหม่ใน SQL Server
หลังจากค้นหาอินเทอร์เน็ตฉันไม่สามารถหาสาเหตุได้ ทำไมเราต้องสร้างและจัดระเบียบดัชนีใหม่ใน SQL Server เกิดอะไรขึ้นภายในเมื่อเราสร้างและจัดระเบียบใหม่ บทความในเว็บไซต์พูดว่า: ดัชนีควรสร้างใหม่เมื่อการแตกแฟรกเมนต์ดัชนีดีกว่า 40% ดัชนีควรถูกจัดระเบียบใหม่เมื่อการกระจายตัวของดัชนีอยู่ระหว่าง 10% ถึง 40% กระบวนการสร้างดัชนีใหม่ใช้ CPU มากขึ้นและล็อคทรัพยากรฐานข้อมูล เวอร์ชันการพัฒนา SQL Server และเวอร์ชันองค์กรมีตัวเลือก ONLINE ซึ่งสามารถเปิดได้เมื่อสร้างดัชนีใหม่ ตัวเลือกออนไลน์จะทำให้ดัชนีพร้อมใช้งานในระหว่างการสร้างใหม่ ฉันไม่สามารถเข้าใจได้ถึงแม้ว่ามันจะบอกว่าWHENต้องทำสิ่งนี้ แต่ฉันอยากรู้ว่าWHYเราจำเป็นต้องสร้างและจัดระเบียบดัชนีใหม่หรือไม่

1
การใช้ varchar (5,000) จะไม่ดีเมื่อเทียบกับ varchar (255)
ตั้งแต่varcharanyways จัดสรรพื้นที่แบบไดนามิกคำถามของฉันคือไม่ว่าจะใช้มีประสิทธิภาพมากขึ้นหรือประหยัดพื้นที่มากขึ้นเมื่อเทียบกับการใช้varchar(255) varchar(5000)ถ้าใช่ทำไม
28 sql-server 

4
การอัพเดตแถวด้วยค่าเดียวกันอัพเดตแถวจริงหรือไม่?
ฉันมีคำถามเกี่ยวกับประสิทธิภาพ สมมติว่าฉันมีผู้ใช้ชื่อ Michael ใช้แบบสอบถามต่อไปนี้: UPDATE users SET first_name = 'Michael' WHERE users.id = 123 แบบสอบถามจะดำเนินการอัปเดตจริงหรือไม่แม้ว่าจะมีการอัปเดตเป็นค่าเดียวกันหรือไม่ ถ้าเป็นเช่นนั้นฉันจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

6
แบบสอบถามเพื่อรายงานการจัดสรรพื้นที่ดิสก์และพื้นที่ใช้งาน
เรากำลังใช้ฐานข้อมูลทั้งหมด 6 รายการสำหรับแอปพลิเคชันและเราสามารถแบ่งปันพื้นที่ 4TB ในฐานข้อมูลที่เติบโตอัตโนมัติทั้ง 6 รายการ (ผ่านที่เก็บข้อมูล SAN) ฉันต้องการเขียนแบบสอบถาม (รายงาน) สำหรับฐานข้อมูลเดียวที่ระบุแอตทริบิวต์ "พื้นที่ที่จัดสรรในปัจจุบัน" และ "พื้นที่ว่างที่มีอยู่" ภายใต้ตัวเลือกงาน> ลดขนาด> ฐานข้อมูลใน Studio จัดการเซิร์ฟเวอร์ SQL จากนั้นฉันต้องการแปลงตัวเลขเหล่านี้เป็น TB และรวมแต่ละฐานข้อมูลเพื่อให้ได้ประมาณคร่าวๆว่ามีพื้นที่เหลืออยู่เท่าใด สามารถเข้าถึงฟิลด์เหล่านี้ผ่านการสืบค้น T-SQL ได้หรือไม่? ถ้าเป็นเช่นนั้นแบบสอบถามจะมีลักษณะอย่างไร

7
อะไรคือเหตุผล ** ไม่ ** ในการใช้เครื่องมือจัดเก็บข้อมูล MEMORY ใน MySQL?
ฉันเพิ่งค้นพบว่า MySQL มีเอ็นจิ้น "หน่วยความจำ" ที่ฉันไม่ทราบ ดูเหมือนว่าตัวเลือกนี้ควรให้ประสิทธิภาพที่ดีขึ้นอย่างมากกับฉันดังนั้นฉันจึงสงสัยว่ามีข้อบกพร่องใด ๆ ทั้งสองที่ฉันรู้คือ: ฉันต้องมี RAM เพียงพอที่จะถือตารางในคำถาม ตารางจะหายไปหากเครื่องปิด ฉันเชื่อว่า # 1 ไม่ควรเป็นปัญหาเนื่องจากฉันใช้ AWS EC2 และสามารถย้ายไปยังประเภทอินสแตนซ์ที่มีหน่วยความจำเพิ่มขึ้นหากจำเป็น ฉันเชื่อว่าฉันสามารถลด # 2 ได้โดยการถ่ายโอนข้อมูลกลับไปที่ดิสก์ตามต้องการ มีปัญหาอื่นอีกไหม เอ็นจิ้นหน่วยความจำสามารถให้ประสิทธิภาพที่แย่กว่า MyISAM หรือ InnoDB ได้หรือไม่? ฉันคิดว่าฉันอ่านบางอย่างที่ดัชนีแตกต่างจากเครื่องมือนี้ เป็นสิ่งที่ฉันต้องกังวลหรือไม่

4
ตรวจสอบว่ามีผู้ใช้อยู่ในฐานข้อมูล SQL Server หรือไม่
ฉันทำงานกับ SQL Server 2012 ฉันต้องการตรวจสอบว่ามีผู้ใช้อยู่ก่อนที่จะเพิ่มลงในฐานข้อมูลหรือไม่ นี่คือสิ่งที่ฉันได้ทดสอบ: USE [MyDatabase] GO IF NOT EXISTS (SELECT name FROM [sys].[server_principals] WHERE name = N'IIS APPPOOL\MyWebApi AppPool') Begin CREATE USER [IIS APPPOOL\MyWebApi AppPool] FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo] end ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool] GO แต่รหัสนี้จะไม่กลับมาหากผู้ใช้ที่มีอยู่ในSELECT name FROM [sys].[server_principals]MyDatabase ฉันจะตรวจสอบว่ามีผู้ใช้อยู่ในได้MyDatabaseอย่างไร?

3
pgAdmin 4 เวอร์ชัน 3 ล้มเหลวในการเปิดเป็นครั้งที่สอง
ฉันเพิ่งติดตั้งpgAdmin 4เวอร์ชัน 3.0.0 สำหรับmacOS Sierraแทนที่pgAdminที่มาพร้อมกับPostgres 10.3 ที่ใช้งานบนเครื่อง Mac เครื่องเดียวกัน ฉันเปิดpgAdmin 4.appไอคอนแอพซึ่งทำให้เบราว์เซอร์ Safariมาที่ด้านหน้าพร้อมกับแท็บแสดงส่วนติดต่อผู้ใช้ pgAdmin ตามปกติ ดี. ฉันปิดแท็บนั้นใน Safari ตอนนี้เมื่อฉันเปิดpgAdmin 4.appไอคอน (การดับเบิลคลิกหรือเลือกFile> Open) ไม่มีอะไรเกิดขึ้น pgAdmin ควรจะเปิดในหน้าต่างเบราว์เซอร์แทนที่จะเป็นในหน้าต่างของแอพหรือไม่? ➡จะเปิด pgAdmin อีกครั้งได้อย่างไร?

2
"ดัชนีการจับคู่บางส่วน" คืออะไร
ฉันกำลังพยายามเรียนรู้เพิ่มเติมเกี่ยวกับตัวดำเนินการแบบสอบถาม "การอ้างอิงต่างประเทศ" ที่แนะนำใน SQL Server 2016 มีข้อมูลไม่มากนัก Microsoft ประกาศมันนี่และฉัน blogged เกี่ยวกับเรื่องนี้ที่นี่ ผู้ประกอบการใหม่สามารถมองเห็นได้โดยการลบแถวจากตารางผู้ปกครองที่มี 254 หรือเข้ามาเพิ่มเติมอ้างอิงที่สำคัญต่างประเทศ: การเชื่อมโยง dbfiddle มีจำนวนการนับที่แตกต่างกันสามรายการที่แสดงในรายละเอียดผู้ประกอบการ การอ้างอิงคีย์ต่างประเทศนับเป็นจำนวนของคีย์ต่างประเทศที่เข้ามา ไม่มีการนับดัชนีที่ตรงกันคือจำนวนกุญแจต่างประเทศที่เข้ามาโดยไม่มีดัชนีที่เหมาะสม การตรวจสอบว่าตารางที่อัปเดตหรือถูกลบจะไม่ละเมิดข้อ จำกัด ดังกล่าวจะต้องสแกนตารางลูก ฉันไม่รู้ว่าการจับคู่ดัชนีบางส่วนหมายถึงอะไร ดัชนีการจับคู่บางส่วนในบริบทนี้คืออะไร ฉันไม่สามารถทำงานต่อไปนี้ได้: ดัชนีที่กรองแล้ว การวางคอลัมน์คีย์ต่างประเทศเป็นINCLUDEคอลัมน์สำหรับดัชนี สร้างดัชนีด้วยคอลัมน์ foreign key เป็นคอลัมน์ key ที่สอง ดัชนีคอลัมน์เดี่ยวสำหรับปุ่มต่างประเทศหลายคอลัมน์ การสร้างดัชนีครอบคลุมหลายรายการเพื่อเปิดใช้งานแผน "เข้าร่วมดัชนี" สำหรับคีย์ต่างประเทศหลายคอลัมน์ Dan Guzmanชี้ให้เห็นว่าคีย์ต่างประเทศหลายคอลัมน์สามารถจับคู่ดัชนีแม้ว่าคีย์ดัชนีจะอยู่ในลำดับที่แตกต่างจากคอลัมน์คีย์ต่างประเทศ รหัสของเขาอยู่ที่นี่ในกรณีที่มีคนสามารถใช้เป็นจุดเริ่มต้นเพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับดัชนีการจับคู่บางส่วน

4
การคัดลอกตาราง (หลายร้อย) จากเซิร์ฟเวอร์หนึ่งไปยังอีก (ด้วย SSMS)
ฉันมีตารางหลายร้อย (ปัจจุบัน 466 แต่เคยเติบโต) ตารางฉันต้องคัดลอกจากเซิร์ฟเวอร์หนึ่งไปยังอีก ฉันไม่เคยทำแบบนี้มาก่อนดังนั้นฉันไม่แน่ใจเลยว่าจะเข้าใกล้มันอย่างไร ตารางทั้งหมดอยู่ในรูปแบบเดียวกัน:Cart<Eight character customer number> นี่เป็นส่วนหนึ่งของโครงการขนาดใหญ่ที่ฉันรวมCart<Number>ตารางเหล่านี้ทั้งหมดเข้ากับตารางเดียวCartsแต่นั่นเป็นคำถามที่แตกต่างกันโดยสิ้นเชิง ใครบ้างมีวิธีปฏิบัติที่ดีที่สุดที่ฉันสามารถใช้เพื่อคัดลอกตารางเหล่านี้ทั้งหมดหรือไม่ ชื่อฐานข้อมูลบนเซิร์ฟเวอร์ทั้งสองจะเหมือนกันหากเป็นเช่นนั้น และอย่างที่ฉันบอกไว้ก่อนหน้านี้ฉันมีsaบัญชีเพื่อให้ฉันสามารถทำสิ่งที่จำเป็นเพื่อรับข้อมูลจาก A ถึง B เซิร์ฟเวอร์ทั้งสองอยู่ในเซิร์ฟเวอร์ฟาร์มเดียวกันเช่นกัน

1
SQL Server 2014: คำอธิบายใด ๆ สำหรับการประเมิน cardinality ที่ไม่สอดคล้องกันของตนเอง?
พิจารณาแผนแบบสอบถามต่อไปนี้ใน SQL Server 2014: ในแผนแบบสอบถามการเข้าร่วมด้วยตนเองar.fId = ar.fIdจะให้ผลประมาณ 1 แถว อย่างไรก็ตามนี่เป็นค่าประมาณที่ไม่สอดคล้องกันเชิงตรรกะ: arมี20,608แถวและมีค่าที่แตกต่างกันเพียงหนึ่งค่าfId(สะท้อนให้เห็นอย่างถูกต้องในสถิติ) ดังนั้นการเข้าร่วมนี้จะสร้างผลิตภัณฑ์ไขว้เต็มของแถว ( ~424MMแถว) ทำให้คิวรีทำงานเป็นเวลาหลายชั่วโมง ฉันมีเวลายากที่จะเข้าใจว่าทำไม SQL Server ถึงได้มีการประมาณการที่สามารถพิสูจน์ได้อย่างง่ายดายว่าไม่สอดคล้องกับสถิติ ความคิดใด ๆ การตรวจสอบเบื้องต้นและรายละเอียดเพิ่มเติม จากคำตอบของ Paul ที่นี่ดูเหมือนว่าทั้งฮิวริสติก SQL 2012 และ SQL 2014 สำหรับการประเมิน cardinality ที่เข้าร่วมควรจัดการสถานการณ์ที่ฮิสโทแกรมที่เหมือนกันทั้งสองต้องเปรียบเทียบได้ง่าย ฉันเริ่มต้นด้วยผลลัพธ์จากการตั้งค่าสถานะการสืบค้นกลับ 2363 แต่ไม่สามารถเข้าใจได้อย่างง่ายดาย ตัวอย่างต่อไปนี้หมายความว่า SQL Server เปรียบเทียบฮิสโตแกรมสำหรับfIdและbIdเพื่อประเมินการเลือกของการเข้าร่วมที่ใช้เท่านั้นfIdหรือไม่ ถ้าเป็นเช่นนั้นแน่นอนว่าจะไม่ถูกต้อง หรือฉันกำลังอ่านเอาต์พุตแฟล็กการติดตามผิด? Plan for computation: CSelCalcExpressionComparedToExpression( QCOL: [ar].fId x_cmpEq QCOL: …

2
นามแฝงคอลัมน์อ้างอิงในรายการ SELECT เดียวกัน
ฉันกำลังแปลงระบบเก่าที่ใช้ MS-Access เป็น PostgreSQL ในการเข้าถึงเขตข้อมูลที่สร้างขึ้นใน SELECT สามารถใช้เป็นส่วนหนึ่งของสมการสำหรับเขตข้อมูลในภายหลังเช่นนี้ SELECT samples.id, samples.wet_weight / samples.dry_weight - 1 AS percent_water, 100 * percent_water AS percent_water_100 FROM samples; เมื่อฉันทำเช่นนี้ใน PostgreSQL, Postgres จะพ่นข้อผิดพลาด: ข้อผิดพลาด: ไม่มีคอลัมน์ "percent_water" นี่คือวิธีที่ฉันสามารถแก้ไขได้โดยเลือกจากตัวเลือกย่อย: SELECT s1.id, s1.percent_water, 100 * s1.percent_water AS percent_water_100 FROM ( SELECT samples.id, samples.wet_weight / samples.dry_weight - 1 AS percent_water …

6
วิธีดูมุมมองที่เข้ารหัสหรือกระบวนงานที่เก็บไว้
ฉันกำลังทำงานกับฐานข้อมูลบุคคลที่สาม เมื่อฉันพยายามที่จะดูคำจำกัดความของมุมมองโดยการคลิกขวาCREATE TOจากนั้นNEW QUERY EDIT WINDOWฉันก็จะได้รับข้อผิดพลาด: คุณสมบัตินี้อาจไม่มีอยู่สำหรับวัตถุนี้หรืออาจไม่สามารถเรียกคืนได้เนื่องจากสิทธิ์การเข้าถึงไม่เพียงพอ ข้อความถูกเข้ารหัส

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