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

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

1
PostgreSQL เตรียมการสืบค้นด้วยพารามิเตอร์ IN ()
ฉันพยายามจัดทำแบบสอบถามจาก PHP เช่น: pg_prepare($con, "prep", "select * from test where tid in ($1)"); จากนั้นเรียกใช้งานด้วย: $strpar = "3,4,6,8,10"; pg_execute($con, "prep", array($strpars)); ปัญหาคือฉันไม่สามารถผ่านชุดของค่าที่สร้างขึ้นตามที่เตรียมไว้คาดว่าจะมีพารามิเตอร์จำนวนคงที่ มีวิธีใดที่จะทำให้พารามิเตอร์เป็นแบบไดนามิกหรือไม่?

1
ประสิทธิภาพของ MongoDB เทียบกับ PostgreSQL 5.5 ล้านแถว / เอกสาร
บางคนสามารถช่วยฉันเปรียบเทียบคิวรีเหล่านี้และอธิบายว่าทำไมเคียวรี PostgreSQL ดำเนินการในเวลาไม่เกิน 2000 มิลลิวินาทีและคิวรีการรวม MongoDB ใช้เวลาเกือบ 9000 มิลลิวินาทีและบางครั้งสูงถึง 130K มิลลิวินาที PostgreSQL 9.3.2 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit แบบสอบถาม PostgreSQL SELECT locomotive_id, SUM(date_trunc('second', datetime) - date_trunc('second', prevDatetime)) AS utilization_time FROM bpkdmp WHERE datetime >= '2013-7-26 00:00:00.0000' AND datetime …

2
การออกแบบคลังข้อมูลสำหรับการรายงานข้อมูลกับเขตเวลาต่างๆ
เรากำลังพยายามปรับการออกแบบคลังข้อมูลให้เหมาะสมซึ่งจะสนับสนุนการรายงานข้อมูลสำหรับเขตเวลาต่างๆ ตัวอย่างเช่นเราอาจมีรายงานมูลค่ากิจกรรมหนึ่งเดือน (หลายล้านแถว) ที่ต้องแสดงกิจกรรมที่จัดกลุ่มตามชั่วโมงของวัน และแน่นอนว่าชั่วโมงของวันนั้นจะต้องเป็นชั่วโมง "ท้องถิ่น" สำหรับเขตเวลาที่กำหนด เรามีการออกแบบที่ทำงานได้ดีเมื่อเราเพิ่งสนับสนุน UTC และเวลาท้องถิ่น การออกแบบมาตรฐานของมิติวันที่และเวลาสำหรับ UTC และเวลาท้องถิ่นรหัสของบนตารางข้อมูลจริง อย่างไรก็ตามวิธีการดังกล่าวดูเหมือนจะไม่ขยายหากเราต้องสนับสนุนการรายงานสำหรับเขตเวลา 100+ ตารางความจริงของเรากว้างขึ้นมาก นอกจากนี้เราจะต้องแก้ปัญหาไวยากรณ์ใน SQL เพื่อระบุวันที่และเวลาที่จะใช้สำหรับการจัดกลุ่มในการเรียกใช้รายงานใด ๆ อาจเป็นคำสั่งกรณีที่มีขนาดใหญ่มาก? ฉันเห็นคำแนะนำเพื่อรับข้อมูลทั้งหมดตามช่วงเวลา UTC ที่คุณครอบคลุมจากนั้นส่งคืนไปยังเลเยอร์การนำเสนอเพื่อแปลงเป็นแบบโลคัลและรวมที่นั่น แต่การทดสอบที่ จำกัด กับ SSRS ชี้ให้เห็นว่าจะช้ามาก ฉันได้อ่านหนังสือบางเล่มเกี่ยวกับเรื่องนี้ด้วยและพวกเขาทั้งหมดพูดว่ามีเพียง UTC และแปลงเป็นไฟล์แสดงหรือมี UTC และหนึ่งในท้องถิ่น จะขอบคุณความคิดและข้อเสนอแนะใด ๆ หมายเหตุ: คำถามนี้คล้ายกับ: การจัดการโซนเวลาใน data mart / warehouseแต่ฉันไม่สามารถแสดงความคิดเห็นกับคำถามนั้นได้ดังนั้นรู้สึกว่าสมควรได้รับคำถามของตัวเอง อัปเดต:ฉันเลือกคำตอบของแอรอนหลังจากเขาทำการอัปเดตที่สำคัญและโพสต์โค้ดตัวอย่างและไดอะแกรม ความคิดเห็นก่อนหน้าของฉันเกี่ยวกับคำตอบของเขาจะไม่สมเหตุสมผลอีกต่อไปเนื่องจากพวกเขาอ้างถึงการแก้ไขคำตอบเดิม ฉันจะพยายามกลับมาและอัปเดตสิ่งนี้อีกครั้งหากรับประกัน

3
ฉันจะค้นหาตารางทั้งหมดในฐานข้อมูลที่ไม่มีคีย์หลักที่ชัดเจนได้อย่างไร
การค้นหาของ Google ได้กล่าวถึงจำนวนล้านครั้งของวิธีการค้นหาตารางที่ไม่มีการทำดัชนีแบบกลุ่มโดยปกติ PK จะเป็นดัชนีแบบกลุ่มของตาราง อย่างไรก็ตามตารางสามารถมีคีย์ธรรมชาติได้อย่างง่ายดายเป็นดัชนีคลัสเตอร์และดัชนีตัวแทนเสมือนที่ไม่ทำคลัสเตอร์เช่นคอลัมน์ข้อมูลประจำตัว ฉันจะค้นหาตารางทั้งหมดในฐานข้อมูลโดยไม่มีคีย์หลักได้อย่างไร ฉันมี 245 ตารางในฐานข้อมูลนี้: การตรวจสอบด้วยตนเองไม่มีประสิทธิภาพอย่างไม่มีการลด

1
ประสิทธิภาพการสืบค้นต่ำ
เรามีกระบวนการขนาดใหญ่ (10,000+ บรรทัด) ซึ่งโดยทั่วไปแล้วจะทำงานใน 0.5-6.0 วินาทีขึ้นอยู่กับปริมาณข้อมูลที่ต้องใช้งาน ในช่วงเดือนที่ผ่านมาหรือประมาณ 30 กว่าวินาทีหลังจากเราอัปเดตสถิติด้วย FULLSCAN เมื่อมันช้าลง sp_recompile "แก้ไข" ปัญหาจนกว่างานสถิติรายค่ำคืนจะทำงานอีกครั้ง ด้วยการเปรียบเทียบแผนการดำเนินการที่ช้าและเร็วฉันได้ จำกัด ให้แคบลงเป็นตาราง / ดัชนีเฉพาะ เมื่อมันทำงานช้ามันกำลังประมาณ ~ 300 แถวจะถูกส่งคืนจากดัชนีเฉพาะเมื่อมันทำงานเร็วมันจะประมาณ 1 แถว เมื่อรันช้ามันจะใช้ Table Spool หลังจากทำการค้นหาบนดัชนีเมื่อมันรันเร็วมันจะไม่ทำ Spool Table ใช้ DBSS SHOW_STATISTICS ฉันทำกราฟฮิสโตแกรมดัชนีใน excel ปกติแล้วฉันจะคาดหวังว่ากราฟจะเป็น "ภูเขากลิ้ง" มากกว่า แต่ดูเหมือนว่าภูเขาซึ่งเป็นจุดที่สูงที่สุดคือ 2x-3x สูงกว่าค่าอื่น ๆ ส่วนใหญ่บนกราฟ หากฉันอัปเดตสถิติโดยไม่มี FULLSCAN มันจะดูเป็นปกติมากกว่า ถ้าฉันเรียกใช้ด้วย FULLSCAN อีกครั้งดูเหมือนว่าฉันอธิบายไว้ข้างต้น …

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

3
จะทำการอัพเกรดเล็กน้อยของ PostgreSQL บน Windows เช่น 9.3.0 เป็น 9.3.1 ได้อย่างไร
อะไรคือวิธีที่แนะนำในการอัพเกรดเล็กน้อยจาก PostgreSQL เช่น 9.3.0 เป็น 9.3.1 โดยใช้โปรแกรมติดตั้ง windows ที่สร้างโดย Enterprise DB ฉันควรถอนการติดตั้งก่อนหรือเพียงแค่ติดตั้งผ่านการติดตั้งที่มีอยู่? การติดตั้งปัจจุบันได้ดำเนินการกับ postgresql-9.3.0-1-windows-x64.exe ตอนนี้ฉันต้องการอัพเกรดโดยใช้ postgresql-9.3.1-1-windows-x64.exe

1
การรับหลาย ๆ คำสั่งด้วย“ แสดงระดับการแยกธุรกรรม” ใน pg_activity
ฉันใช้เซิร์ฟเวอร์ PostgreSQL สำหรับการใช้งานจริงของฉัน เมื่อฉันเริ่มต้นแบบสอบถาม select * from pg_stat_activity บนเซิร์ฟเวอร์ของฉันฉันได้รับ 98% ของข้อความค้นหาเช่น SHOW TRANSACTION ISOLATION LEVEL และเซิร์ฟเวอร์ของฉันยอมรับการเชื่อมต่อเพียง 100 ครั้งดังนั้นฉันจึงไม่สามารถดำเนินการต่อไปได้ ทำไมสิ่งนี้จึงเกิดขึ้น ฉันจะบล็อกข้อความค้นหาเหล่านี้ทั้งหมดได้อย่างไร

2
เป็นไปได้หรือไม่ที่จะกรองรายการฐานข้อมูลใน Object Explorer ของ SSMS
ฉันรู้วิธีกรองรายการตาราง - ใช้ไอคอนตัวกรอง อย่างไรก็ตามไอคอนนี้ถูกปิดใช้งานเมื่อเลือกโหนดฐานข้อมูล ยังฉันสงสัยว่ามันเป็นไปได้
10 sql-server  ssms 

2
เมื่อใดที่ต้องทำการเปลี่ยนแปลงเกณฑ์ต้นทุนสำหรับการขนาน
ในขณะที่ตรวจสอบปัญหาประสิทธิภาพฉันได้เห็นการไหลเข้าของ CXPACKETS แนะนำว่าฉันอาจต้องดูเกณฑ์ต้นทุนสำหรับการขนานและบางที MAXDOP ก่อนที่จะทำการเปลี่ยนแปลงอย่างรุนแรงต่อ MAXDOP ฉันได้ทำตามคำแนะนำของคนอื่น ๆ รวมถึง @mrdenny ในคำตอบของCXPACKET รอการปรับแต่งประสิทธิภาพสำหรับ SQL Server 2008และคำตอบของ @ aron-Bertrand จากการจัดการกับ CXPACKET ขนาน ฉันได้เพิ่มในการบำรุงรักษาเพื่ออัปเดตสถิติอย่างเต็มที่ทุกคืน นี่ให้ความรู้สึกเหมือนเป็นการเคลื่อนไหวที่สมเหตุสมผล อย่างไรก็ตามการแก้ไขเกณฑ์ต้นทุนยังคงเป็นสิ่งที่ทำให้ฉันรำคาญ เกณฑ์ต้นทุนสำหรับการขนานนั้นควรมีการเปลี่ยนแปลงที่จุดใด ไม่มีใครมีตัวอย่างของที่ (หลังจากตรวจสอบค่าใช้จ่ายของแบบสอบถามและภาระงานของพวกเขา) พวกเขาทำการเปลี่ยนแปลงค่าใช้จ่ายนี้หรือไม่? ขออภัยหากนี่เป็นสิ่งที่ตอบไว้ในคำถามก่อนหน้านี้ ขอบคุณ!

1
การส่งชื่อคอลัมน์แบบไดนามิกไปที่ UNPIVOT
ฉันมีตารางที่มีข้อมูลต่อไปนี้ First Second Third Fourth Fifth Sixth 2013-08-20 2013-08-21 2013-08-22 2013-08-23 2013-08-24 2013-08-25 และการใช้งาน UNPIVOT SELECT Data ,DATENAME(DW, Data) AS DayName FROM Cal UNPIVOT(Data FOR D IN ( First, Second, Third, Fourth, Fifth, Sixth )) AS unpvt ฉันได้รับผลลัพธ์ต่อไปนี้ Data DayName 2013-08-20 Tuesday 2013-08-21 Wednesday 2013-08-22 Thursday 2013-08-23 Friday 2013-08-24 Saturday …

1
ผงชูรส 666 เมื่อเรียกใช้แบบสอบถามแทรกในตารางดัชนี 80M แถว
น่าแปลกที่กระบวนการจัดเก็บของฉันเริ่มได้รับข่าวสารเกี่ยวกับ 666 สำหรับข้อมูลอินพุตบางส่วน กระบวนงานที่เก็บไว้ล้มเหลวในขั้นตอนสุดท้ายเมื่อพยายามแทรกแถวลงในตารางด้วยโครงสร้างต่อไปนี้: Columns: A_Id: PK, int B_Id: PK, FK, int C_Id: PK, FK, int D_Id: PK, smallint นี่คือตารางที่เชื่อมโยงเอนทิตีที่อ้างอิงทั้งหมดเข้าด้วยกัน Indexes: IX_TableName_D_id - Clustered index on D_id column PK_TableName - Unique non-clustered index on all columns (A_Id, B_Id, C_Id, D_Id) การกระจายตัวของดัชนีทั้งสองอยู่ในระดับต่ำ (<25%) อย่างไรก็ตามการแตกแฟรกเมนต์ PK_TableName เติบโตอย่างรวดเร็วเนื่องจากจำนวนการดำเนินการบนตารางค่อนข้างรุนแรง ขนาดโต๊ะ: Row count: ~80,000,000 rows …

2
mysqladmin ไม่ใช้รหัสผ่านแบบอินไลน์
ฉันกำลังพยายามตั้งค่า cron สำหรับการสำรองข้อมูลจากเครื่องส ดังนั้นฉันต้องหยุดทาส ฉันออกคำสั่ง mysqladmin --user=root --password=test_pass stop-slave แต่มันกำลังโยนข้อผิดพลาด: mysqladmin: เชื่อมต่อกับเซิร์ฟเวอร์ที่ 'localhost' ล้มเหลวผิดพลาด: 'การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้' รูท '@' localhost '(ใช้รหัสผ่าน: YES)' ตอนนี้ฉันลองด้วยคำสั่ง mysqladmin --user=root --password stop-slave มันให้รหัสผ่านและฉันก็ให้test_passและทุกอย่างก็ดี ทำไมจึงเกิดขึ้น ทางเลือกคืออะไร? NB: BTW รุ่น mysql ของฉันคือmysql-5.0.95-5มันทำให้รู้สึกใด ๆ

1
รับ“ ORA-00942: ไม่มีตารางหรือมุมมอง” ในขณะที่มีตารางอยู่
ฉันค่อนข้างใหม่กับฐานข้อมูล Oracle ผมได้ติดตั้งบนOracle Database 11g R2 Oracle Linux 6ฉันสร้างฐานข้อมูลใหม่ด้วยdbcaและเชื่อมต่อกับฐานข้อมูลโดยใช้: $ sqlplus "/ as sysdba" ฉันสร้างตารางสำเร็จและแทรกข้อมูลบางส่วนแล้วทำการเลือกบางอย่าง: SQL> CREATE TABLE Instructors ( tid NUMBER(7) PRIMARY KEY, fname VARCHAR2(32), lname VARCHAR2(32), tel NUMBER(16), adrs VARCHAR2(128) ); Table created. SQL> INSERT INTO Instructors (tid, fname, lname, tel, adrs) VALUES (8431001, 'John', 'Smith', 654321, 'London'); …

1
การวางคำสั่ง Select ในธุรกรรม
ข้อแตกต่างระหว่าง 2 ข้อความค้นหาเหล่านี้คืออะไร: START TRANSACTION; SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; COMMIT; และไม่มีการทำธุรกรรม: SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; ผลของการมีSELECTการทำธุรกรรมภายในคืออะไร? หากDELETE FROM orders WHERE id=1ถูกเรียกจากเซสชันอื่นหลังจากSELECTทั้งสองกรณีจะถูกประมวลผลเมื่อใด

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