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

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

3
ดัชนีคอลัมน์แบบคลัสเตอร์และคีย์ต่างประเทศ
ฉันกำลังปรับแต่งคลังข้อมูลโดยใช้ดัชนี ฉันค่อนข้างใหม่กับ SQL Server 2014 Microsoft อธิบายต่อไปนี้: "เราดูดัชนี columnstore ของคลัสเตอร์เป็นมาตรฐานสำหรับการจัดเก็บตารางข้อมูลคลังข้อมูลขนาดใหญ่และคาดว่าจะใช้ในสถานการณ์จำลองคลังข้อมูลส่วนใหญ่เนื่องจากดัชนี columnstore ของคลัสเตอร์สามารถอัปเดตได้เวิร์กโหลดของคุณสามารถทำการแทรกจำนวนมาก และลบการทำงาน " http://msdn.microsoft.com/en-us/library/gg492088.aspx อย่างไรก็ตามหากคุณอ่านเพิ่มเติมในเอกสารคุณจะพบภายใต้ข้อ จำกัด และข้อ จำกัด : "ไม่สามารถมีข้อ จำกัด ที่ไม่ซ้ำกันข้อ จำกัด ของคีย์หลักหรือข้อ จำกัด ของ Foreign Key" ทำให้ฉันงงมาก! เป็นวิธีปฏิบัติที่ดี (ไม่บังคับ) ให้มีคีย์ต่างประเทศในคลังข้อมูลด้วยเหตุผลหลายประการ (ความสมบูรณ์ของข้อมูลความสัมพันธ์ที่มองเห็นได้สำหรับเลเยอร์ความหมาย ... ) ดังนั้นไมโครซอฟท์จึงสนับสนุนการจัดทำดัชนีคอลัมน์แบบจัดกลุ่มสำหรับสถานการณ์คลังข้อมูล แต่มันไม่สามารถจัดการกับความสัมพันธ์ที่สำคัญกับต่างประเทศได้! ฉันถูกต้องหรือไม่ วิธีอื่นใดที่คุณจะแนะนำ ในอดีตที่ผ่านมาฉันใช้ดัชนี columnstore ที่ไม่ใช่คลัสเตอร์ในสถานการณ์ data warehouse โดยมีการปล่อยและสร้างใหม่สำหรับการโหลดข้อมูล อย่างไรก็ตาม SQL Server 2014 …

1
“ ไม่สามารถสร้างแถวที่มีขนาด 8074 ซึ่งมากกว่าขนาดแถวสูงสุดที่อนุญาตได้ที่ 8060” ในขณะที่เปลี่ยนตาราง
ฉันกำลังพยายามเปลี่ยนคอลัมน์ในตาราง ตารางที่มีอยู่เป็นดังนี้: CREATE TABLE [dbo].[table]( [id1] [int] NOT NULL, [id2] [int] NOT NULL, [id3] [int] NOT NULL, [name] [nvarchar](255) NOT NULL, [id4] [int] NOT NULL, [xmlData] [xml](CONTENT [dbo].[xml_schema]) NULL, [booleanData1] [bit] NOT NULL, [notes] [varchar](4096) NULL, [id5] [int] NULL, [booleanData2] [bit] NULL, [id6] [int] NULL, CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED …

2
ประสิทธิภาพการเลื่อนหน้าด้วยการเรียงลำดับที่กำหนดเองได้หลายล้านแถว
ในแอปพลิเคชันของเราเรามีตารางที่ผู้ใช้สามารถเลื่อนดูระเบียนจำนวนมาก (10-20 ล้าน) กริดรองรับการเรียงลำดับจากน้อยไปมากและจากมากไปน้อยในคอลัมน์จำนวนมาก (20+) ค่าจำนวนมากยังไม่ซ้ำกันดังนั้นแอปพลิเคชันจึงเรียงลำดับตาม id เป็นตัวแบ่งไทม์เบรกเพื่อให้แน่ใจว่าแถวปรากฏบนหน้าเดียวกันเสมอ ตัวอย่างเช่นหากผู้ใช้ต้องการเรียงลำดับตามขนาดวิดเจ็ต (เริ่มต้นที่ใหญ่ที่สุด) แอปพลิเคชันจะสร้างคิวรีที่มีลักษณะดังนี้: SELECT TOP 30 * -- (Pretend that there is a list of columns here) FROM Test -- WHERE widgetSize > 100 ORDER BY widgetSize DESC, id ASC เคียวรีนี้ใช้เวลา ~ 15s ในการรัน (ด้วยข้อมูลที่แคช) ค่าใช้จ่ายส่วนใหญ่ดูเหมือนจะเรียงลำดับแถว ~ 1.3m โดย widgetSize ในความพยายามที่จะปรับแต่งแบบสอบถามนี้ฉันค้นพบว่าถ้าฉันเพิ่มในWHEREประโยคที่ จำกัด …

4
Memory Optimized Tables - พวกเขายากที่จะรักษาหรือไม่?
ฉันกำลังตรวจสอบประโยชน์ของการอัปเกรดจาก MS SQL 2012 เป็น 2014 หนึ่งในจุดขายที่ยิ่งใหญ่ของ SQL 2014 คือตารางที่ปรับให้เหมาะสมกับหน่วยความจำ ฉันพบว่ามีข้อ จำกัด บางประการเกี่ยวกับตารางที่เพิ่มประสิทธิภาพหน่วยความจำเช่น: ไม่มี(max)ฟิลด์ขนาด สูงสุด ~ 1KB ต่อแถว ไม่มีtimestampสาขา ไม่มีคอลัมน์ที่คำนวณ ไม่มีUNIQUEข้อ จำกัด สิ่งเหล่านี้มีคุณสมบัติเป็นสิ่งรบกวน แต่ถ้าฉันต้องการที่จะหลีกเลี่ยงพวกเขาเพื่อให้ได้รับผลประโยชน์จากการทำงานฉันสามารถวางแผนได้ นักเตะตัวจริงคือความจริงที่ว่าคุณไม่สามารถเรียกใช้ALTER TABLEคำสั่งได้และคุณจะต้องผ่านอุปกรณ์ตรวจจับนี้ทุกครั้งที่คุณเพิ่มฟิลด์ลงในINCLUDEรายการดัชนี นอกจากนี้ยังปรากฏว่าคุณต้องปิดผู้ใช้ออกจากระบบเพื่อที่จะเปลี่ยนแปลงสคีมาใด ๆ กับตาราง MO บนฐานข้อมูลสด ฉันพบว่าสิ่งนี้ช่างเลวร้ายเหลือเกินจนฉันไม่อยากเชื่อเลยว่าไมโครซอฟท์อาจลงทุนด้านการพัฒนาเป็นจำนวนมากในฟีเจอร์นี้ สิ่งนี้นำฉันไปสู่ข้อสรุปที่ว่าฉันต้องผ่านจุดผิดที่ผิดพลาด ฉันต้องเข้าใจผิดบางอย่างเกี่ยวกับตารางที่ปรับให้เหมาะสมกับหน่วยความจำซึ่งทำให้ฉันเชื่อว่าการบำรุงรักษามันยากกว่าที่เป็นจริง ดังนั้นฉันเข้าใจผิดอะไร คุณใช้ตาราง MO แล้วหรือยัง มีการสลับลับหรือกระบวนการบางอย่างที่ทำให้สามารถใช้งานและบำรุงรักษาได้จริงหรือไม่?

1
ทำไมคุณต้องจัดทำดัชนี text_pattern_ops ในคอลัมน์ข้อความ
วันนี้ฐานข้อมูลเจ็ดแห่งในเจ็ดสัปดาห์แนะนำให้ฉันรู้จักกับดัชนีผู้ดำเนินการต่อ คุณสามารถจัดทำดัชนีสตริงสำหรับรูปแบบที่ตรงกับแบบสอบถามก่อนหน้านี้โดยสร้างtext_pattern_opsดัชนีระดับผู้ประกอบการตราบใดที่มีการจัดทำดัชนีเป็นตัวพิมพ์เล็ก CREATE INDEX moves_title_pattern ON movies ( (lower(title) text_pattern_ops); เราใช้text_pattern_opsเพราะชื่อเป็นข้อความประเภท หากคุณจำเป็นต้องดัชนี varchars, ตัวอักษรหรือชื่อที่ใช้ปฏิบัติการที่เกี่ยวข้อง: varchar_pattern_ops, และbpchar_pattern_opsname_pattern_ops ฉันพบตัวอย่างที่ทำให้สับสนจริงๆ ทำไมการทำเช่นนี้จึงมีประโยชน์ หากคอลัมน์เป็นข้อความประเภทจะไม่ถูกแปลงเป็นประเภทอื่น (varchar, char, name) เป็นข้อความก่อนที่จะใช้เป็นค่าการค้นหาหรือไม่ ดัชนีนั้นมีพฤติกรรมแตกต่างจากที่ใช้ตัวดำเนินการเริ่มต้นอย่างไร CREATE INDEX moves_title_pattern ON movies (lower(title));

3
VACUUM FREEZE vs. VACUUM FULL
บางคนสามารถอธิบายความแตกต่างระหว่างVACUUMPostgreSQL ประเภทนี้ได้ไหม ฉันอ่านเอกสาร แต่มันเพิ่งบอกว่าFULLล็อคตารางและFREEZE"ค้าง" สิ่งอันดับ ฉันคิดว่ามันเหมือนกัน ฉันผิดหรือเปล่า?

6
แบบสอบถามเพื่อเปรียบเทียบโครงสร้างของสองตารางใน MySQL
เพื่อให้กระบวนการสำรองข้อมูลของฐานข้อมูล MySQL ของฉันเป็นแบบอัตโนมัติฉันต้องการเปรียบเทียบโครงสร้างของสองตาราง (เวอร์ชันปัจจุบันเทียบกับเวอร์ชันเก่า) คุณนึกถึงการสืบค้นที่สามารถเปรียบเทียบสองตารางได้หรือไม่ นี่คือตัวอย่างตารางที่คุณสามารถเปรียบเทียบได้ CREATE TABLE product_today ( pname VARCHAR(150), price int, PRIMARY KEY (pname) ); CREATE TABLE product_yesterday ( pname VARCHAR(150), price int, PRIMARY KEY (pname) ); CREATE TABLE product_2days_back ( pname VARCHAR(15), price int, PRIMARY KEY (pname) ); สองตารางแรกมีโครงสร้างเหมือนกัน อันสุดท้ายแตกต่างกัน ฉันแค่ต้องรู้ว่าสองตารางมีโครงสร้างต่างกันหรือไม่ ฉันไม่สนใจว่ามันแตกต่างกันอย่างไร

1
การใช้ DISTINCT เป็นคำใบ้ในแบบสอบถามย่อยมีประโยชน์หรือไม่
การเพิ่มDISTINCTในตัวอย่างต่อไปนี้มีผลกระทบต่อเวลาทำงานของแบบสอบถามหรือไม่ ควรใช้เป็นคำใบ้ในบางครั้งหรือไม่? SELECT * FROM A WHERE A.SomeColumn IN (SELECT DISTINCT B.SomeColumn FROM B)

3
รับไฟล์ WAL จากอินสแตนซ์ AWG RDS PostgreSQL
เรามีอินสแตนซ์ Postgres RDS บน Amazon Web Services เรามีการสำรองข้อมูลอัตโนมัติที่เปิดใช้งานและเราถ่ายภาพเป็นรายวัน เราต้องการสร้างการสำรองข้อมูล 'ล่าสุด' ของอินสแตนซ์ RDS ที่เราสามารถจัดการตนเองได้ การรัน pg_dump กับอินสแตนซ์นั้นไม่เพียงพอเพราะเราต้องการที่จะสามารถกู้คืนฐานข้อมูลไปยังจุดใดก็ได้ในเวลา เราต้องการให้มีการสำรองข้อมูล RDS แบบโลคัลและไฟล์ WAL ทั้งหมดตั้งแต่มีการสำรองข้อมูลนั้น คำถาม: เป็นไปได้หรือไม่ที่จะเข้าถึงไฟล์ WAL และการสำรองข้อมูลที่ RDS สร้างขึ้นโดยอัตโนมัติในรูทีนการสำรองข้อมูล มันจะเหมาะ ฉันต้องการดาวน์โหลดสำเนาในเครื่องของพวกเขา หลังจากการตรวจสอบเบื้องต้นฉันรู้สึกว่าคำตอบของคำถามนี้คือ 'ไม่' ดูเหมือนว่า RDS จะจัดเก็บไฟล์ WAL และการสำรองข้อมูลไว้ใน S3 แต่มันทำให้เราไม่สามารถเข้าถึงได้ ฉันจะรักการยืนยัน มีวิธีอื่นในการเข้าถึงทรานแซคชัน (ไฟล์ WAL) ที่เกิดขึ้นในอินสแตนซ์ของ RDS หรือไม่? ฉันคิดว่าเราควรจะสามารถสร้างฐานข้อมูล Postgres บนธุรกรรม EC2 และ …

2
จะทำการสำรองข้อมูลเพิ่มเติมทุก ๆ ชั่วโมงใน Postgres ได้อย่างไร
กำลังพยายามสำรองข้อมูลเพิ่มรายชั่วโมงของเซิร์ฟเวอร์ Postgres เดียว (Win7 64) ฉันมีการตั้งค่าต่อไปนี้ในpostgresql.conf: max_wal_senders = 2 wal_level = archive archive_mode = on archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"' (เริ่มต้นใหม่) ฉันได้สำรองฐานกับ pg_basebackup -U postgres -D ..\foo -F t -x ซึ่งทำให้base.tarไฟล์ขนาดใหญ่ในfooโฟลเดอร์และเพิ่มไฟล์ 16,384 KB ซึ่งผมถือว่าเป็น WAL สิ่งที่ผมไม่เข้าใจคือทำไม Wals ในfooไม่เปลี่ยนแปลง การdata/pg_xlogเปลี่ยนแปลงใน WAL pg ไม่ควรคัดลอกไปหรือไม่ มันจะตัดสินใจอย่างไร บางทีฉันต้องตั้งค่าarchive_timeout=3600? ฉันเห็นหลายไซต์ (รายการส่งเมลของ pg, หน้า postgres ของ …

6
อย่าใช้ธุรกรรมสำหรับกระบวนงานที่เก็บไว้
ฉันมีขั้นตอนการจัดเก็บที่รันคำสั่งไม่กี่คำ ฉันไม่ต้องการให้ห่อคำสั่งเหล่านี้ในธุรกรรมของกระบวนงานที่เก็บไว้ หากคำสั่งที่ 4 ล้มเหลวฉันต้องการให้อันดับที่ 1, ที่ 2 และที่ 3 อยู่และไม่ย้อนกลับ เป็นไปได้ไหมที่จะเขียนโพรซีเดอร์ที่เก็บไว้ในลักษณะที่มันไม่ได้ดำเนินการทั้งหมดในการทำธุรกรรมครั้งใหญ่?

2
เหตุใดจึงไม่ลบพื้นที่ว่าง (DB2) ของ DELETE + REORG
ใน DB2 ฉันมีตารางที่มีข้อมูลไบนารีขนาดใหญ่ ตอนนี้ฉันล้างตารางทั้งหมดและรัน runstats, reorg, runstats แต่ปริมาณของพื้นที่ดิสก์ที่ใช้ไม่เปลี่ยนแปลง มีอะไรผิดปกติที่นี่? ตารางอยู่ใน tablespace ของตัวเองซึ่งฉันสร้างดังต่อไปนี้: CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096; CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING; ฉันลบ / …

3
แยกการสืบค้น SQL ที่มีการรวมเป็นจำนวนน้อย
เราต้องทำการรายงานบางอย่างทุกคืนใน SQL Server 2008 R2 ของเรา การคำนวณรายงานใช้เวลาหลายชั่วโมง เพื่อที่จะย่นเวลาเราจะคำนวณตารางล่วงหน้า ตารางนี้สร้างขึ้นจากการเข้าร่วม 12 ตารางที่มีขนาดค่อนข้างใหญ่ (หลายสิบล้านแถว) การคำนวณตารางรวมนี้ใช้เวลาไม่กี่วันที่ผ่านมา cca 4 ชั่วโมง DBA ของเราดีกว่าแบ่งการรวมครั้งใหญ่นี้ออกเป็น 3 การรวมที่เล็กกว่า (แต่ละการรวม 4 ตาราง) ผลลัพธ์ชั่วคราวจะถูกบันทึกลงในตารางชั่วคราวทุกครั้งที่ใช้ในการเข้าร่วมครั้งต่อไป ผลลัพธ์ของการปรับปรุง DBA คือตารางการรวมจะถูกคำนวณใน 15 นาที ฉันสงสัยว่าเป็นไปได้อย่างไร DBA บอกฉันว่ามันเป็นเพราะจำนวนข้อมูลที่เซิร์ฟเวอร์ต้องดำเนินการมีขนาดเล็กลง กล่าวอีกนัยหนึ่งว่าในการเข้าร่วมต้นฉบับใหญ่เซิร์ฟเวอร์ต้องทำงานกับข้อมูลมากกว่าการรวมตัวเล็กลง อย่างไรก็ตามฉันจะสันนิษฐานว่าเครื่องมือเพิ่มประสิทธิภาพจะดูแลการทำอย่างมีประสิทธิภาพด้วยการเข้าร่วมครั้งใหญ่โดยแยกการรวมเข้าด้วยกันและส่งเฉพาะจำนวนคอลัมน์ที่จำเป็นสำหรับการเข้าร่วมครั้งต่อไป อีกสิ่งที่เขาทำคือเขาสร้างดัชนีในหนึ่งในตารางชั่วคราว อย่างไรก็ตามอีกครั้งฉันคิดว่าเครื่องมือเพิ่มประสิทธิภาพจะสร้างตารางแฮชที่เหมาะสมหากจำเป็น ฉันพูดคุยเกี่ยวกับเรื่องนี้กับ DBA ของเรา แต่เขาเองก็ไม่แน่ใจเกี่ยวกับสิ่งที่ทำให้เวลาในการปรับปรุงดีขึ้น เขาเพิ่งพูดถึงว่าเขาจะไม่ตำหนิเซิร์ฟเวอร์เพราะมันมีจำนวนมหาศาลในการคำนวณข้อมูลขนาดใหญ่และเป็นไปได้ว่าเครื่องมือเพิ่มประสิทธิภาพมีเวลายากที่จะคาดการณ์แผนการดำเนินการที่ดีที่สุด ... ฉันเข้าใจสิ่งนี้ แต่ฉันต้องการคำตอบที่ชัดเจนยิ่งขึ้นว่าทำไม ดังนั้นคำถามคือ: สิ่งที่อาจทำให้เกิดการปรับปรุงครั้งใหญ่? มันเป็นขั้นตอนมาตรฐานในการแยกการรวมขนาดใหญ่ออกเป็นเล็กหรือไม่? ปริมาณของข้อมูลที่เซิร์ฟเวอร์มีการประมวลผลที่เล็กกว่าจริง ๆ ในกรณีที่มีการรวมขนาดเล็กหลายครั้งหรือไม่? …

7
จัดตารางเวลารายวันเป็น [วันที่เริ่ม; วันที่สิ้นสุด] ช่วงเวลาพร้อมรายการวันในสัปดาห์
ฉันต้องการแปลงข้อมูลระหว่างสองระบบ ระบบแรกจัดเก็บตารางเวลาเป็นรายการธรรมดาของวันที่ แต่ละวันที่รวมอยู่ในกำหนดการคือหนึ่งแถว อาจมีช่องว่างต่าง ๆ ในลำดับของวันที่ (วันหยุดสุดสัปดาห์วันหยุดราชการและหยุดอีกต่อไปบางวันของสัปดาห์อาจไม่รวมอยู่ในตาราง) ไม่มีช่องว่างเลยแม้แต่วันหยุดสุดสัปดาห์ก็สามารถรวม กำหนดการอาจนานถึง 2 ปี โดยปกติจะใช้เวลาไม่กี่สัปดาห์ นี่คือตัวอย่างง่ายๆของตารางที่ครอบคลุมสองสัปดาห์ยกเว้นวันหยุดสุดสัปดาห์ (มีตัวอย่างที่ซับซ้อนมากขึ้นในสคริปต์ด้านล่าง): +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | …

3
ความสอดคล้องในทฤษฎีบทกรดและ CAP มันเหมือนกันหรือไม่?
จากความเข้าใจของฉันความสอดคล้องใน ACID คือการรับรองความถูกต้องของข้อมูล อย่างไรก็ตามความสอดคล้องใน CAP หมายถึงข้อมูลสามารถปรากฏอย่างรวดเร็วในระบบกระจาย หมายความว่า: พวกเขาไม่ได้แนวคิดเดียวกันหรือไม่

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