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

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

3
อัปเกรดจาก postgres 9.1 เป็น 9.3 บนเซิร์ฟเวอร์ Ubuntu
ฉันมีเซิร์ฟเวอร์ที่ใช้งานจริงของฉัน (Ubuntu 13.10) ที่ทำงานกับ postgresql 9.1 ฉันต้องการใช้คุณสมบัติไม่กี่ข้อที่ 9.3 ดังนั้นจึงต้องการอัพเกรด มีคนช่วยฉันอัปเกรดจาก 9.1 เป็น 9.3 เพื่อให้มีการหยุดทำงานไม่เกิน 30 นาที หรือไม่ก็? ความกังวลหลักคือการป้องกันการสูญเสียข้อมูลหรือความซ้ำซ้อนไฟล์

6
การเปลี่ยนการใช้ GETDATE () ในฐานข้อมูลทั้งหมด
ฉันต้องโยกย้ายฐานข้อมูล SQL Server 2017 ในสถานที่ไปยังฐานข้อมูล Azure SQL และฉันเผชิญกับความท้าทายบางอย่างเนื่องจากมีข้อ จำกัด อยู่บ้าง โดยเฉพาะอย่างยิ่งเนื่องจากฐานข้อมูล Azure SQL ทำงานได้เฉพาะในเวลา UTC (ไม่มีเขตเวลา) และเราต้องการเวลาท้องถิ่นเราจึงต้องเปลี่ยนการใช้งานGETDATE() ทุกที่ในฐานข้อมูลซึ่งพิสูจน์แล้วว่าทำงานได้ดีกว่าที่คาดไว้ ฉันสร้างฟังก์ชันที่ผู้ใช้กำหนดเพื่อให้ได้เวลาท้องถิ่นที่ทำงานอย่างถูกต้องสำหรับเขตเวลาของฉัน: CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END ปัญหาที่ฉันมีปัญหาคือการเปลี่ยนแปลงจริง ๆGETDATE()กับฟังก์ชั่นนี้ในทุกมุมมองกระบวนงานที่เก็บไว้คอลัมน์ที่คำนวณได้ค่าเริ่มต้นข้อ จำกัด อื่น ๆ ฯลฯ อะไรจะเป็นวิธีที่ดีที่สุดในการใช้การเปลี่ยนแปลงนี้ …

2
วิธีที่เร็วที่สุดในการแทรกแถวจำนวนมากคืออะไร?
ฉันมีฐานข้อมูลที่ฉันโหลดไฟล์ลงในตารางการแสดงละครจากตารางการแสดงนี้ฉันมี 1-2 ร่วมเพื่อแก้ไขคีย์ต่างประเทศแล้วใส่แถวนี้ลงในตารางสุดท้าย (ซึ่งมีหนึ่งพาร์ติชันต่อเดือน) ฉันมีข้อมูลประมาณ 3.4 พันล้านแถวสำหรับสามเดือน วิธีที่เร็วที่สุดในการดึงแถวเหล่านี้จากการจัดเตรียมลงในตารางสุดท้ายคืออะไร SSIS Data Flow Task (ที่ใช้มุมมองเป็นแหล่งที่มาและมีการโหลดที่ใช้งานอย่างรวดเร็ว) หรือคำสั่งแทรกลงใน SELECT ... ฉันลอง Data Flow Task และสามารถรับประมาณ 1 พันล้านแถวในเวลาประมาณ 5 ชั่วโมง (8 cores / 192 GB RAM บนเซิร์ฟเวอร์) ซึ่งรู้สึกช้ามากสำหรับฉัน

1
เหตุใดข้อความค้นหาทำให้เกิดการรั่วไหลของ tempdb
พื้นหลัง ฉันอยู่ในขั้นตอนการย้ายฐานข้อมูล 160GB จาก MSSQL 2008 (มาตรฐาน) บนเซิร์ฟเวอร์ Win 2008 ที่มี 48gb RAM ไปยังเซิร์ฟเวอร์ใหม่ที่ใช้ MSSQL 2012 (รุ่นเว็บ 64 บิต) ใน Win 2012 ด้วย 64GB ของ RAM เซิร์ฟเวอร์เก่าใช้งานได้และอยู่ระหว่างการโหลด เซิร์ฟเวอร์ใหม่ไม่ได้ใช้งานจริง เซิร์ฟเวอร์ใหม่มีไฟล์ 8 tempdb (แต่ละไฟล์ 4GB) ปัญหา ในการทดสอบบนเซิร์ฟเวอร์ใหม่ฉันเห็นขั้นตอนในการสอบถามจำนวนมากทำให้เกิดการแจ้งเตือนถึง "ผู้ดำเนินการใช้ tempdb เพื่อทำข้อมูลหกระหว่างการดำเนินการ" ฉันสามารถหลีกเลี่ยงการเรียงลำดับได้โดยเขียนคำค้นหาบางคำใหม่ แต่นี่ไม่ได้เป็นการแก้ปัญหาจริงๆ แบบสอบถามเดียวกันบนเซิร์ฟเวอร์เก่าไม่ทำให้เกิดการรั่วไหล ฉันได้อ่านว่าการรั่วไหลเกิดขึ้นเมื่อ MSSQL ไม่สามารถดำเนินการในหน่วยความจำจนเสร็จและต้องมีการหก / หน้าลงใน tempdb ฉันควรจะกังวลเกี่ยวกับการหกหรือไม่ ตัวอย่าง ฉันรัน …

3
RANK () และ DENSE_RANK () กำหนดขึ้นหรือไม่ได้กำหนดไว้หรือไม่
ตามBOL DENSE_RANK อย่างเป็นทางการของ Microsoftเป็น nondeterministic ( RANK () ) แต่ตามฟังก์ชั่นการจัดอันดับโดย Itzik Ben-Gan "... ฟังก์ชั่น RANK () และ DENSE_RANK () นั้นมักจะถูกกำหนด" ถูกต้องใคร สิ่งที่ฉันได้ค้นพบแล้ว: นิยามของ Microsoft "ฟังก์ชันกำหนดค่าจะส่งคืนผลลัพธ์เดียวกันทุกครั้งที่มีการเรียกใช้ด้วยชุดค่าอินพุตเฉพาะและกำหนดสถานะของฐานข้อมูลเดียวกัน" ดังนั้นใน Set ทฤษฎีตารางพนักงาน Employee Salary Sue Right 1.00 Robin Page 1.00 Phil Factor 1.00 และพนักงาน 2 Employee Salary Phil Factor 1.00 Sue Right 1.00 Robin …
27 sql-server 

2
Max Connection Pool ปกคลุมที่ 100
ฉันใช้ SQL Server 2008 R2 SP1 บนกล่อง Windows Server 2008 ฉันมี. สคริปต์ NET ที่ทำงานจาก Visual Studio 2010 ที่ทำสิ่งต่อไปนี้: เข้าถึงฐานข้อมูล ทำการเปลี่ยนแปลง iterates จำนวนครั้งทั้งหมดที่จะทำซ้ำคือ 150 แต่จะหยุดที่ 100 การเชื่อมต่อและฉันไม่สามารถหาสาเหตุ ฉันสามารถปรับสคริปท์ของฉันให้ใช้แค่เธรดเดียว แต่ฉันอยากรู้ว่าฉันขาดการตั้งค่าการเชื่อมต่อสูงสุดเพราะจะมีประโยชน์มากกว่าสำหรับการอ้างอิงในอนาคต นี่คือสิ่งที่ฉันตรวจสอบแล้ว: สตริงการเชื่อมต่อ SQL ใน Visual Studio 2010 (ตั้งค่าเป็น 1,000) คุณสมบัติการเชื่อมต่ออินสแตนซ์ฐานข้อมูล SSMS (ตั้งค่าเป็น 0 [อินฟินิตี้] การเชื่อมต่อผู้ใช้) Googled ข้อมูลบางอย่างใน Server 2008 ดูเหมือนว่าสามารถรองรับการเชื่อมต่อมากกว่า 100 รายการ …
27 sql-server 

4
ทำไมค่าใช้จ่ายโดยประมาณของ (เหมือนกัน) 1,000 ค้นหาในดัชนีที่ไม่ซ้ำกันแตกต่างกันในแผนเหล่านี้
ในแบบสอบถามด้านล่างแผนการดำเนินการทั้งคู่คาดว่าจะทำการค้นหา 1,000 ครั้งในดัชนีที่ไม่ซ้ำกัน การค้นหาถูกขับเคลื่อนโดยการสแกนที่สั่งในตารางแหล่งเดียวกันดังนั้นดูเหมือนว่าควรจะจบลงด้วยการค้นหาค่าเดียวกันในลำดับเดียวกัน ทั้งลูปซ้อนกันมี <NestedLoops Optimized="false" WithOrderedPrefetch="true"> ใครรู้ว่าทำไมงานนี้มีราคาอยู่ที่ 0.172434 ในแผนแรก แต่ 3.01702 ต่อวินาที (เหตุผลของคำถามคือคำถามแรกที่เสนอให้ฉันเป็นการเพิ่มประสิทธิภาพเนื่องจากราคาแผนต่ำกว่ามากจริง ๆ แล้วดูเหมือนว่าฉันจะทำงานได้มากกว่า แต่ฉันพยายามอธิบายความแตกต่าง .. .) ติดตั้ง CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); INSERT INTO dbo.Target SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER …

2
พื้นที่ตารางเริ่มต้นกำหนดอย่างไรเมื่อสร้างตาราง
Tablespaceพารามิเตอร์เป็นตัวเลือกเมื่อมีการสร้างตาราง เมื่อประมวลผลCREATE TABLEคำสั่ง Oracle จะกำหนดค่าเริ่มต้นหากไม่ได้กำหนดไว้ ในฐานข้อมูลเริ่มต้นจะมีพื้นที่ตาราง "USERS" หากมีการกำหนดหลายพื้นที่ตารางหนึ่งจะกำหนดหนึ่ง
27 oracle 

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

1
postgresql: ฉันจะถ่ายโอนและกู้คืนบทบาทสำหรับคลัสเตอร์ได้อย่างไร
บทบาทถูกเก็บไว้ในคลัสเตอร์ที่ไหนและฉันจะถ่ายโอนข้อมูลได้อย่างไร ฉันทำ pg_dump ของ db แล้วโหลดลงในคลัสเตอร์อื่น แต่ฉันได้รับข้อผิดพลาดมากมาย: psql:mydump.sql:3621: ERROR: role "myrole" does not exist เห็นได้ชัดว่าการถ่ายโอนข้อมูลของฐานข้อมูลของฉันไม่รวมถึงบทบาท ฉันพยายามทิ้ง db 'postgres' แต่ฉันไม่เห็นบทบาทที่นั่นเช่นกัน ฉันจำเป็นต้องใช้pg_dumpall --roles-onlyหรือไม่ Postgresql รุ่น 8.4.8 และ 9.1.4 ระบบปฏิบัติการ: Ubuntu 11.04 Natty

4
ทำไมฉันถึงได้รับ 'Impossible WHERE สังเกตหลังจากอ่าน const tables' ในคำอธิบายการสืบค้น?
ฉันมีคีย์ผสมที่ไม่ซ้ำกันเช่น fr (fromid, toid) ในตารางเมื่อฉันเรียกใช้แบบสอบถามด้วยคำอธิบายฉันได้รับผลลัพธ์ต่อไปนี้: Impossible WHERE noticed after reading const tables` คำถามที่ฉันวิ่ง: explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60 ความช่วยเหลือใด ๆ EDIT1: เมื่อฉันใช้แบบสอบถามด้านล่าง: explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t' ฉันเห็นUSING WHEREแทนที่จะเป็นข้อความก่อนหน้า แต่เมื่อฉันใช้แบบสอบถามด้านล่าง: explain SELECT rid FROM relationship WHERE …
27 mysql  explain 

1
การตัดฟิลด์ Varchar (สูงสุด) หลังจาก 8000 ตัวอักษร
varchar(max)ผมมีข้อมูลในการจัดเก็บข้อมูลบางข้อมูลที่มีการประกาศให้เป็น เพื่อความเข้าใจของฉันนี้ควรเก็บ2^31 - 1อักขระ แต่เมื่อฉันป้อนเนื้อหาบางส่วนมากกว่า 8000 ตัวอักษรมันตัดส่วนที่เหลือออก ฉันได้ตรวจสอบแล้วว่าข้อมูลทั้งหมดรวมอยู่ในคำสั่งการปรับปรุงของฉันและแบบสอบถามดูดีทุกที่อื่น แต่เมื่อฉันเลือกข้อมูลกลับมันถูกตัดออกไป ข้อมูลถูกตัดทอนเมื่อฉันแสดงบนเว็บไซต์ของฉันและเมื่อฉันใช้ SSMS select content from tableด้วย select DATALENGTH (content) from table กลับมาเป็น 8000 ฉันตั้งค่าข้อมูลโดยใช้สิ่งนี้: update table set content = 'my long content' where id = 1. เนื้อหามี HTML จำนวนมาก แต่ฉันไม่เห็นสาเหตุที่ทำให้เกิดปัญหา สิ่งเดียวที่ฉันเห็นว่าฉันกำลังทำอยู่คือแทนที่ทั้งหมด"ด้วย''สิ่งนี้คือเนื้อหาที่ผู้ใช้ป้อน (จำไม่ได้ว่าทำไมฉันถึงทำตอนนี้) ฉันจัดการเพื่อให้เนื้อหาเข้าสู่อย่างถูกต้องโดยลบเครื่องหมายคำพูดเดี่ยวทั้งหมดในเนื้อหาดังนั้นฉันคิดว่ามีบางสิ่งผิดปกติเกิดขึ้นกับข้อมูลของฉันมากกว่าฐานข้อมูล ฉันควรจะทำสิ่งพิเศษกับแบบสอบถามเพื่อใช้varchar(max)เขตข้อมูลหรือไม่ การใช้: SQL Server 2008 (10.50) 64 บิต

2
MySQL สร้างตารางชั่วคราวบนดิสก์ ฉันจะหยุดมันได้อย่างไร
เรากำลังเรียกใช้ไซต์ (Moodle) ที่ผู้ใช้พบว่าช้า ฉันคิดว่าฉันได้ติดตามปัญหาของ MySQL ที่สร้างตารางชั่วคราวบนดิสก์ ฉันดูตัวแปรcreated_tmp_disk_tablesในการดูแลเซิร์ฟเวอร์ Mysql Workbench และจำนวนเพิ่มขึ้นด้วยประมาณ 50 tables / s หลังจากใช้ไป 1 วันcreated_tmp_disk_tablesคือ> 100k นอกจากนี้ดูเหมือนว่าหน่วยความจำจะไม่ออก การใช้งานเพิ่มขึ้นเรื่อย ๆ จนกระทั่งระบบใช้งานไม่ได้และเราต้องเริ่ม MySQL ใหม่ ฉันต้องเริ่มต้นใหม่เกือบทุกวันและเริ่มต้นด้วยการใช้หน่วยความจำที่มีอยู่ประมาณ 30-35% และจบวันด้วย 80% ฉันไม่มี blobs ในฐานข้อมูลและไม่สามารถควบคุมการค้นหาได้ดังนั้นฉันจึงไม่สามารถพยายามปรับให้เหมาะสม ฉันได้ใช้Percona Confirguration Wizardเพื่อสร้างไฟล์การกำหนดค่า แต่ my.ini ไม่ได้แก้ปัญหาเช่นกัน คำถาม ฉันควรเปลี่ยนอะไรเพื่อหยุด MySQL ไม่ให้สร้างตารางชั่วคราวบนดิสก์ จำเป็นต้องเปลี่ยนการตั้งค่าหรือไม่? ฉันควรจะโยนความทรงจำมากกว่านี้หรือไม่ ฉันจะหยุด MySQL ไม่ให้กินหน่วยความจำได้อย่างไร แก้ไข ฉันเปิดใช้งานการslow_queriesบันทึกและค้นพบว่าการสืบค้นSELECT GET_LOCK()ถูกบันทึกไว้ช้า การค้นหาอย่างรวดเร็วเปิดเผยว่าฉันอนุญาตการเชื่อมต่อแบบถาวรในการกำหนดค่า …

6
ทำไมแบบสอบถาม SELECT DISTINCT TOP N ของฉันจึงสแกนทั้งตาราง
ฉันใช้SELECT DISTINCT TOP Nแบบสอบถามน้อยซึ่งดูเหมือนว่าจะเพิ่มประสิทธิภาพไม่ดีโดยเพิ่มประสิทธิภาพแบบสอบถาม SQL Server เริ่มจากการพิจารณาตัวอย่างเล็ก ๆ น้อย ๆ : ตารางหนึ่งล้านแถวที่มีสองค่าสลับกัน ฉันจะใช้ฟังก์ชันGetNumsเพื่อสร้างข้อมูล: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; สำหรับแบบสอบถามต่อไปนี้: SELECT DISTINCT …

2
ฉันจะทำการอบ MySQL อย่างถูกต้องได้อย่างไร?
ฉันต้องการทดสอบประสิทธิภาพ (เรียกว่าอบ) เซิร์ฟเวอร์ MySQL รอบต่อนาทีกับส้อมอื่น ๆ เช่นเซิร์ฟเวอร์ Percona, MariaDB และอาจเป็นไปได้ ฉันหวังว่าด้วยการถามคำถามนี้ฉันสามารถเข้าใจวิธีการที่อยู่เบื้องหลังการตั้งค่าการทดสอบประสิทธิภาพที่เหมาะสม ฉันวางแผนที่จะใช้ sysbench เพื่อทำการทดสอบจริง แต่ฉันเปิดทุกอย่าง ขั้นตอนใดที่ฉันควรทำเพื่อให้แน่ใจว่าผลการทดสอบในการเปรียบเทียบแอปเปิ้ลกับแอปเปิ้ลและ RDBMS นั้นเป็นเพียงตัวแปรเท่านั้น ฉันจะเริ่มต้นที่ไหน ฉันจะประเมินผลลัพธ์ได้อย่างไร คุณให้คำแนะนำอะไรแก่ฉัน

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