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

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

4
SQL ออกแบบตารางขนาดใหญ่
ฉันมีคำถามทั่วไปเกี่ยวกับการออกแบบตาราง SQL Server 2008 ขณะนี้เรามีตารางที่มีมากกว่า 600GB และเติบโตที่ประมาณ 3GB ต่อวัน ตารางนี้มีตัวบ่งชี้ที่เหมาะสม แต่กำลังกลายเป็น hangup ที่สำคัญเมื่อเรียกใช้คิวรีและเนื่องจากขนาดของมัน คำถามคือฉันควรแบ่งตารางออกเป็นหลาย ๆ ตารางตามปีและเดือน (ซึ่งจะเหมาะสมกับแผนกอื่น ๆ ที่แยกชุดข้อมูลขนาดใหญ่ของพวกเขา) หรือเราควรใช้ประโยชน์จากการแบ่งพาร์ติชันที่สร้างไว้ใน SQL Server ดูเหมือนว่าการใช้การแบ่งพาร์ติชันจะต้องมีการเปลี่ยนแปลงรหัสน้อย จากสิ่งที่ฉันอ่านเมื่อทำการแบ่งพาร์ติชั่นคุณยังคงสืบค้นเฉพาะหนึ่งตารางและเซิร์ฟเวอร์จะจัดการวิธีรับข้อมูล หากเราไปหลายเส้นทางเราจะต้องจัดการกับการดึงข้อมูลจากหลายตาราง

4
แถว 'จริง' ไม่ถูกต้องนับเป็นแผนขนาน
นี่เป็นคำถามเชิงวิชาการล้วนๆที่มันไม่ก่อให้เกิดปัญหาและฉันแค่สนใจที่จะฟังคำอธิบายเกี่ยวกับพฤติกรรม รับปัญหามาตรฐาน Itzik Ben-Gan ตารางเข้าร่วม CTE นับรวม: USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[TallyTable] ( @N INT ) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( WITH E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 …
17 sql-server 


3
มีวิธีเข้าถึงตารางชั่วคราวของเซสชันอื่น ๆ ใน postgres หรือไม่?
ฉันทำงานกับแอพพลิเคชั่น Windows ที่ใช้ฐานข้อมูล postgres (ในพื้นที่) และเก็บข้อมูลบางอย่างไว้ในตารางชั่วคราว ฉันต้องการดูตารางชั่วคราว แต่ pgadmin และ dbVis บอกฉัน: ERROR: cannot access temporary tables of other sessionsเมื่อพยายามสืบค้นข้อมูล ฉันพยายามเปลี่ยนการอนุญาตของ schema และตาราง แต่ดูเหมือนจะไม่ช่วยแม้ว่าฉันจะเข้าถึงฐานข้อมูลกับผู้ใช้เดียวกันกับโปรแกรมตัวเอง (อย่างน้อยใน dbVis) มีการตั้งค่าที่ฉันสามารถเปลี่ยนในฐานข้อมูลของฉันที่อนุญาตให้ฉันเข้าถึง "รูท" ทุกเซสชันในฐานข้อมูลของฉันได้หรือไม่?

3
สุดยอด MyISAM และ InnoDB
เป็นไปได้หรือไม่ที่จะทำให้ InnoDB ใช้ดัชนีเช่นเดียวกับ MyISAM แทนที่จะเป็นดัชนีแบบคลัสเตอร์เนื่องจากข้อ จำกัด ของ RAM ในขณะที่รับประโยชน์จากประสิทธิภาพการทำงานพร้อมกัน?

6
คุณสามารถยกตัวอย่างหนึ่งของ Business Intelligence ได้หรือไม่
ฉันไม่เข้าใจจริงๆว่าข่าวกรองธุรกิจเป็นเรื่องเกี่ยวกับอะไร ถ้าฉันเริ่มต้นจากการมี DB ขององค์กรสิ่งที่คน BI จะทำอย่างไร ฉันพบเนื้อหามากมายบนเว็บ แต่โดยปกติมันซับซ้อนเกินไป ฉันต้องการตัวอย่างง่ายๆที่จะทำให้ฉันเข้าใจว่า BI คืออะไรเกี่ยวกับและบุคคล BI จะผลิตอะไรที่มีคุณค่าต่อองค์กรของฉัน

4
วิธีแก้ข้อผิดพลาดการคัดลอกลำดับไบต์ UTF8 ที่ไม่ถูกต้องในการกู้คืนเมื่อฐานข้อมูลต้นทางถูกเข้ารหัสใน UTF8
ฉันได้รับมอบหมายให้ย้ายฐานข้อมูล PostgreSQL 8.2.x ไปยังเซิร์ฟเวอร์อื่น เมื่อต้องการทำสิ่งนี้ฉันใช้ pgAdmin 1.12.2 (บน Ubuntu 11.04 โดยวิธี) และใช้การสำรองข้อมูลและคืนค่าโดยใช้รูปแบบที่กำหนดเอง / บีบอัด (.backup) และการเข้ารหัส UTF8 ฐานข้อมูลดั้งเดิมอยู่ใน UTF8 ดังนี้: -- Database: favela -- DROP DATABASE favela; CREATE DATABASE favela WITH OWNER = favela ENCODING = 'UTF8' TABLESPACE = favela CONNECTION LIMIT = -1; ฉันกำลังสร้างฐานข้อมูลนี้อย่างนี้บนเซิร์ฟเวอร์ปลายทาง แต่เมื่อฉันกู้คืนฐานข้อมูลจากไฟล์. backup โดยใช้ตัวเลือก Restore มันทำให้ฉันมีข้อผิดพลาดบางอย่าง: …

1
PostgreSQL จัดการกับจุดตรวจระหว่างการสำรองข้อมูลที่เปิดใช้งาน WAL ได้อย่างไร
บน PostgreSQL v9.0 ฉันเป็นระบบเก็บถาวร WAL ที่ใช้งานได้ ดังนั้นไฟล์ WAL จะถูกเก็บถาวรตามกฎเกณฑ์ (เมื่อมีการสร้าง 3 WAL หรือหาก WAL มีอายุมากกว่า 15 นาที) ตอนนี้ฉันเพิ่มไบนารีแพคเกจของไดเรกทอรี PG_DATA (ยกเว้นไดเรกทอรีย่อย pg_xlog) ต้องการทำเช่นนั้นฉันทำสำเนาไบนารีและpg_start_backup(),pg_stop_backup() ฉันคิดว่าฉันเข้าใจค่อนข้างดีว่าสิ่งที่ pg_start_backup และ pg_stop_backup กำลังทำอยู่คนแรกสร้างจุดตรวจและคนสุดท้ายทำให้แน่ใจว่าไฟล์ WAL สุดท้ายถูกเก็บถาวร จากเอกสารอย่างเป็นทางการเราจะเห็นว่าสำหรับการคัดลอกข้อมูลไบนารีเราควร: ดำเนินการสำรองข้อมูลโดยใช้เครื่องมือระบบไฟล์สำรองที่สะดวกสบายเช่น tar หรือ cpio (ไม่ใช่ pg_dump หรือ pg_dumpall) ไม่จำเป็นหรือไม่ต้องการหยุดการทำงานปกติของฐานข้อมูลในขณะที่คุณทำเช่นนี้ ดังนั้นฉันค่อนข้างงุนงง นี่หมายความว่าสามารถดำเนินการจุดตรวจได้ในขณะที่เราทำสำเนา ฉันเห็นเอกสารจำนวนมากที่ระบุว่าคำสั่งคัดลอกควรอนุญาตให้มีการเปลี่ยนแปลงข้อมูลในขณะที่ทำการคัดลอกฉันก็โอเคกับเรื่องนี้เพียงแค่หาเครื่องมือที่เหมาะสม แต่คำถามของฉันคือวิธีที่ postgreSQL จะจัดการการกู้คืนด้วยเนื้อหา pg_data ที่มีไฟล์บางไฟล์ที่ไม่สอดคล้องกัน (บางไฟล์มาจากจุดตรวจก่อนหน้า, บางหลังมาจากไหน)? โดยการเล่นซ้ำบันทึกธุรกรรม …

3
ฉันสามารถย้ายแถวระหว่างพาร์ติชั่นโดยอัพเดตพาร์ติชั่นคีย์ได้ไหม?
ฉันคิดว่านี่เป็นคำถามที่ค่อนข้างง่าย แต่จริง ๆ แล้วฉันมีช่วงเวลาที่ยากลำบากในการหาคำตอบสำหรับเรื่องนี้ คำถาม: คุณสามารถย้ายแถวของข้อมูลภายในตารางที่แบ่งพาร์ติชันจากพาร์ติชันหนึ่งไปยังอีกพาร์ติชันโดยเพียงแค่การปรับปรุงคอลัมน์พาร์ติชันเพื่อที่จะข้ามขอบเขตพาร์ติชัน? ตัวอย่างเช่นถ้าฉันมีตารางที่มีพาร์ติชันคีย์: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) ด้วยฟังก์ชั่นพาร์ติชันที่จับคู่กับคีย์หลัก: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); ฉันสามารถย้ายแถวจากพาร์ติชันแรกไปยังพาร์ติชันที่สามได้โดยเปลี่ยน SampleID จาก 1 เป็น 500,000 (พูด) 500,000 หรือไม่ หมายเหตุ: ฉันติดแท็กเป็นทั้งเซิร์ฟเวอร์ sql 2005 และ 2008 เนื่องจากทั้งสองสนับสนุนการแบ่งพาร์ติชัน พวกเขาจัดการกับมันแตกต่างกันหรือไม่?

3
จำลองลำดับ TSQL ผ่านกระบวนงานที่เก็บไว้
ฉันมีความต้องการในการสร้างขั้นตอนการจัดเก็บซึ่งจำลองลำดับ TSQL นั่นคือจะให้ค่าจำนวนเต็มที่แตกต่างเพิ่มขึ้นทุกครั้งที่โทร นอกจากนี้หากมีการส่งจำนวนเต็มควรส่งคืนค่านั้นหากไม่เคยได้ผลลัพธ์ที่ดีกว่าหรือจำนวนเต็มที่สูงสุดถัดไปที่มีอยู่ มันไปโดยไม่บอกว่าอาจมีลูกค้าหลายรายที่เรียกใช้ SP นี้ในเวลาเดียวกัน รับ MetaInfo ตารางพร้อมคอลัมน์ MetaKey varchar (สูงสุด) และ MeatValueLong bigInt คาดว่าแถวที่มี MetaKey ของ 'Internal-ID-Last' จะมีค่าสูงสุดที่กำหนดล่าสุด ฉันสร้างกระบวนงานที่เก็บไว้ต่อไปนี้: CREATE PROCEDURE [dbo].[uspGetNextID] ( @inID bigInt ) AS BEGIN SET NOCOUNT ON; BEGIN TRANSACTION UPDATE MetaInfo WITH (ROWLOCK) SET MetaValueLong = CASE WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1 …


3
ฉันจะรับประกันได้อย่างไรว่าการแทรกไปยัง SQL Server 2008 R2 จะถูกแคชใน RAM ก่อน?
ลองนึกภาพสตรีมของข้อมูลที่ "ระเบิด" นั่นคือสามารถมี 10,000 เหตุการณ์มาถึงอย่างรวดเร็วตามด้วยอะไรสักอย่างในหนึ่งนาที คำแนะนำจากผู้เชี่ยวชาญของคุณ: ฉันจะเขียนโค้ดแทรก C # สำหรับ SQL Server ได้อย่างไรซึ่งรับประกันว่า SQL จะแคชทุกอย่างทันทีใน RAM ของตัวเองโดยไม่บล็อกแอปของฉันมากกว่าที่จะป้อนข้อมูลลงใน RAM ดังกล่าว เพื่อให้บรรลุสิ่งนี้คุณรู้หรือไม่ว่ารูปแบบใด ๆ สำหรับการตั้งค่าเซิร์ฟเวอร์ SQL เองหรือรูปแบบการตั้งค่าตาราง SQL แต่ละตารางที่ฉันกำลังเขียน แน่นอนฉันสามารถทำเวอร์ชั่นของฉันเองซึ่งเกี่ยวข้องกับการสร้างคิวของตัวเองใน RAM - แต่ฉันไม่ต้องการที่จะสร้างยุคหินขวานยุคหินใหม่เพื่อพูด


2
ฆ่าแบบสอบถามทั้งหมด - MySQL
บางครั้งในช่วง SNAFU ฉันต้องวิ่งkill query xxxxxxxยี่สิบหรือสามสิบครั้ง kill allคำสั่งประเภทใดที่ฉันขาดหายไป? เพราะฉันไม่ชอบพิมพ์
17 mysql 

2
REINDEX อันตรายหรือไม่?
ฉันพยายามไปCOUNT(*)ที่โต๊ะที่มี 150,000 แถวที่มีคีย์หลัก มันเป็นเครื่องมือประมาณ 5 นาทีดังนั้นฉันจึงคิดว่านี่เป็นปัญหาการจัดทำดัชนี อ้างถึงคู่มือ PostgreSQL : REINDEX นั้นคล้ายกับการดร็อปและสร้างดัชนีใหม่ซึ่งเนื้อหาดัชนีจะถูกสร้างใหม่ตั้งแต่เริ่มต้น อย่างไรก็ตามข้อควรพิจารณาในการล็อคค่อนข้างแตกต่างกัน REINDEX ล็อคการเขียน แต่ไม่อ่านตารางหลักของดัชนี นอกจากนี้ยังใช้การล็อกแบบเอกสิทธิ์เฉพาะบุคคลในดัชนีเฉพาะที่กำลังประมวลผลซึ่งจะบล็อกการอ่านที่พยายามใช้ดัชนีนั้น (... ) CREATE INDEX ที่ตามมาล็อคการเขียน แต่ไม่อ่าน เนื่องจากดัชนีไม่อยู่ที่นั่นการอ่านจะไม่พยายามใช้ซึ่งหมายความว่าจะไม่มีการบล็อก แต่การอ่านอาจถูกบังคับให้สแกนตามลำดับราคาแพง จากประสบการณ์ของคุณคุณสามารถบอกได้: เป็นREINDEXINGอันตรายหรือไม่? มันจะเป็นอันตรายต่อความสอดคล้องของข้อมูลหรือไม่ ใช้เวลานานไหม? มันเป็นทางออกที่เป็นไปได้สำหรับสถานการณ์ของฉันหรือไม่ ปรับปรุง: วิธีแก้ปัญหาที่ใช้งานได้สำหรับเราคือสร้างดัชนีเดียวกันใหม่ด้วยชื่ออื่นแล้วลบดัชนีเก่า การสร้างดัชนีนั้นรวดเร็วมากและเราได้ลดขนาดดัชนีจาก 650 MB เป็น 8 MB ใช้ a COUNT(*)กับbetweenใช้เวลาเพียง 3 วินาที
17 postgresql 

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