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

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

1
ทำไมมิเรอร์ฐานข้อมูลของฉันแตกหลังจากเปลี่ยนการตั้งค่ากลุ่มไฟล์จาก RESTRICTED_USER เป็น MULTI_USER
สภาพแวดล้อมของฉันคือต่อไปนี้: VMWare 5.5เซิร์ฟเวอร์ vitalized MS Windows Server 2008R2 องค์กรโดเมนและSQL Server 2008 R2 องค์กร จัดเก็บข้อมูลส่วนกลางด้วยการเชื่อมต่อช่องสัญญาณไฟเบอร์ SQL Server DBฉันมีพาร์ทิชันในของฉัน ฉันมี 2 file groups: หนึ่งเดียวกับข้อมูลที่อยู่อาศัย (FG1) , ครั้งที่สองกับข้อมูลทางประวัติศาสตร์ (HDG) read-onlyกลุ่มไฟล์ที่สองคือ แต่ละเดือนฉันเคลื่อนไหวในพาร์ติชัน - ฉันเพิ่มข้อมูลใหม่ (จากเดือนก่อนหน้า) ไปยังข้อมูลประวัติ กระบวนการนี้โดยอัตโนมัติ เราย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์ใหม่ ตอนแรกที่ผมต้องทำกระบวนการด้วยตนเอง ระหว่างการดำเนินการนี้มิร์เรอร์ของฉันหยุดทำงาน (หลังจากการดำเนินการ 3 - ดูการไหลของกระบวนการ) พร้อมข้อผิดพลาดต่อไปนี้: บนเซิร์ฟเวอร์ PRINCIPAL: ROW 0 ในบันทึก: Date 15.6.2015 20:54:11 Log …

1
จัดเก็บชุดคู่คีย์ - ค่าอย่างมีประสิทธิภาพด้วยคีย์ที่แตกต่างกัน
ฉันรับแอปพลิเคชันที่เชื่อมโยงกิจกรรมหลายประเภทกับไซต์ มีประเภทกิจกรรมที่แตกต่างกันประมาณ 100 ประเภทและแต่ละประเภทมีชุดของฟิลด์ 3-10 ที่แตกต่างกัน อย่างไรก็ตามกิจกรรมทั้งหมดมีฟิลด์วันที่อย่างน้อยหนึ่งวัน (อาจเป็นการรวมกันของวันที่วันที่เริ่มต้นวันที่สิ้นสุดวันที่เริ่มต้นที่กำหนด ฯลฯ ) และเขตข้อมูลบุคคลที่รับผิดชอบหนึ่งรายการ ฟิลด์อื่นทั้งหมดนั้นแตกต่างกันอย่างมากและฟิลด์วันที่เริ่มต้นไม่จำเป็นต้องเรียกว่า "วันที่เริ่มต้น" การสร้างตารางย่อยหนึ่งตารางสำหรับแต่ละประเภทกิจกรรมจะส่งผลให้สคีมามี 100 ตารางย่อยที่แตกต่างกันซึ่งจะเกินกว่าที่จะจัดการได้อย่างไม่เหมาะสม ทางออกปัจจุบันของปัญหานี้คือการเก็บค่ากิจกรรมเป็นคู่ของคีย์ - ค่า นี่เป็นสคีมาที่ง่ายขึ้นอย่างมากของระบบปัจจุบันเพื่อให้ได้คะแนน แต่ละกิจกรรมมี ActivityField หลายรายการ แต่ละไซต์มีหลายกิจกรรมและตาราง SiteActivityData จะเก็บ KVP สำหรับแต่ละ SiteActivity สิ่งนี้ทำให้แอปพลิเคชัน (บนเว็บ) ง่ายต่อการเขียนโค้ดเพราะสิ่งที่คุณต้องทำคือวนรอบเรคคอร์ดใน SiteActivityData สำหรับกิจกรรมที่กำหนดและเพิ่มเลเบลและการควบคุมเลเบลและอินพุตสำหรับแต่ละแถวในฟอร์ม แต่มีปัญหามากมาย: ความซื่อสัตย์นั้นไม่ดี เป็นไปได้ที่จะวางเขตข้อมูลใน SiteActivityData ที่ไม่ได้อยู่ในประเภทกิจกรรมและ DataValue เป็นเขตข้อมูล varchar ดังนั้นตัวเลขและวันที่จะต้องถูกโยนอย่างต่อเนื่อง การรายงานและการสอบถามแบบเฉพาะกิจของข้อมูลนี้เป็นเรื่องยากเกิดข้อผิดพลาดได้ง่ายและช้า ตัวอย่างเช่นการรับรายการกิจกรรมทั้งหมดของบางประเภทที่มีวันที่สิ้นสุดภายในช่วงที่ระบุต้องใช้ pivots และการคัดเลือก varchars จนถึงวันที่ ผู้เขียนรายงานเกลียดชังสคีมานี้และฉันไม่ตำหนิพวกเขา …

2
SQL Server DB ไม่สามารถใช้งานข้ามคืนได้
เมื่อวานฐานข้อมูล SQL Server ของฉันใช้ได้ วันนี้มันเกือบจะใช้ไม่ได้ - มันช้าลงโดยมีปัจจัยระหว่างห้าถึงยี่สิบขึ้นอยู่กับเวลาที่ฉันโดนมัน ข้อมูลบางอย่างถูกเพิ่มไปยังเซิร์ฟเวอร์ในกระบวนการโหลดข้ามคืน แต่ไม่มีอะไรเหมือนไดรฟ์ที่ควรส่งผลกระทบต่อฐานข้อมูลที่มาก ประมาณ 50,000 เรคคอร์ดข้อความธรรมดา (ไม่มี XML หรือ frippery อื่น ๆ ) เซิร์ฟเวอร์ได้รับการแก้ไขเมื่อเช้านี้ก่อนที่เราจะรีบูต อย่างไรก็ตามไม่มีเซิร์ฟเวอร์ฐานข้อมูลอื่น ๆ ของเราที่ได้รับการติดตั้งด้วยเช่นกัน การตรวจสอบทรัพยากรดูเหมือนจะแนะนำว่าดิสก์ IO ของตนเป็นความผิดพลาด มันทำงานได้อย่างเต็มประสิทธิภาพ 100% ของความจุไฟล์. mdf ตลอดเวลาแม้ว่าจะมีฐานข้อมูลเกิดขึ้นไม่มากก็ตาม การเข้าถึง Templog.ldf ยังทำงานค่อนข้างสูง ไม่มีใครที่นี่เป็นผู้เชี่ยวชาญ DBA (เราทุกคนเป็นนักพัฒนาที่มีทักษะ SQL แตกต่างกันจำนวนมาก) และเราทุกคนก็งงงันกับสิ่งที่เกิดขึ้น เราได้ลองใช้งาน sp_updatestats และย้ายดัชนีขนาดใหญ่ไปยังดิสก์ที่แตกต่างกันเพื่อไม่เกิดประโยชน์ ฉันคิดว่าสิ่งนี้ต้องมีบางอย่างเกี่ยวกับแพทช์ - ดูเหมือนว่าจะมีอุบัติการณ์มากเกินไป เพื่อนร่วมงานเชื่อมั่นว่าการโหลดข้อมูลทำให้ขนาดของ mdf เพิ่มขึ้นจนถึงจุดที่ทำให้แผนการดำเนินการไม่มีประสิทธิภาพ เกิดอะไรขึ้นบนโลกนี้ …

3
Postgres ทำการสแกนตามลำดับแทนการสแกนดัชนี
ฉันมีตารางที่มีประมาณ 10 ล้านแถวในนั้นและดัชนีในเขตข้อมูลวันที่ เมื่อฉันลองและแยกค่าที่ไม่ซ้ำกันของเขตข้อมูลที่จัดทำดัชนี Postgres เรียกใช้การสแกนตามลำดับแม้ว่าชุดผลลัพธ์มีเพียง 26 รายการ เหตุใดเครื่องมือเพิ่มประสิทธิภาพจึงเลือกแผนนี้ และฉันจะหลีกเลี่ยงได้อย่างไร จากคำตอบอื่น ๆ ฉันสงสัยว่านี่เกี่ยวข้องกับแบบสอบถามมากเท่ากับดัชนี explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) โครงสร้างตาราง: http=# \d pages Table "public.pages" Column | Type …

2
การแทรก M: ความสัมพันธ์จำนวนมากใน PostgreSQL
ฉันต้องการนำเข้าข้อมูลจากฐานข้อมูลเก่าไปยังฐานข้อมูลใหม่ที่มีโครงสร้างแตกต่างกันเล็กน้อย ตัวอย่างเช่นในฐานข้อมูลเก่ามีพนักงานบันทึกตารางและหัวหน้างานของพวกเขาอยู่: CREATE TABLE employee (ident TEXT PRIMARY KEY, name TEXT, supervisor_name TEXT) ตอนนี้ฐานข้อมูลใหม่จะเป็นดังนี้: CREATE TABLE person (id BIGSERIAL PRIMARY KEY, name TEXT, old_ident TEXT); CREATE TABLE team (id BIGSERIAL PRIMARY KEY); CREATE TABLE teammember (person_id BIGINT, team_id BIGINT, role CHAR(1)); นั่นคือแทนที่จะเป็นตารางธรรมดาของพนักงานที่มีชื่อหัวหน้างานของพวกเขาฐานข้อมูลใหม่ (ทั่วไปมากกว่า) ช่วยให้สามารถสร้างทีมงานของคน พนักงานเป็นสมาชิกที่มีบทบาทผู้บังคับบัญชาที่มีบทบาท'e''s' คำถามคือวิธีการย้ายข้อมูลจากemployeeไปยังโครงสร้างใหม่อย่างง่ายดายหนึ่งทีมต่อคู่หัวหน้างาน - พนักงาน ตัวอย่างเช่นพนักงาน employee: …

1
อะไรคือความแตกต่างระหว่างการบีบอัดข้อมูลบน PK กับบนโต๊ะ?
การบีบอัดข้อมูลสามารถตั้งค่าบนโต๊ะ: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED ( SomeId Desc ) ) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE) และสามารถกำหนดได้บนคีย์หลัก: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY …

2
MySQL: ลบ…ใน .. ใน () เทียบกับลบ .. จาก .. เข้าร่วมและล็อคตารางเมื่อลบด้วยการเลือกย่อย
คำเตือน: โปรดแก้ตัวความรู้ของฉันเกี่ยวกับฐานข้อมูลภายใน นี่มันไป: เราเรียกใช้แอปพลิเคชั่น (ไม่ได้เขียนโดยเรา) ซึ่งมีปัญหาประสิทธิภาพการทำงานใหญ่ในงานล้างข้อมูลเป็นระยะในฐานข้อมูล แบบสอบถามมีลักษณะดังนี้: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); ตรงไปตรงมา SQL ที่อ่านง่ายและมาตรฐาน แต่น่าเสียดายที่ช้ามาก การอธิบายเคียวรีแสดงว่าไม่ได้ใช้ดัชนีที่VARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_IDมีอยู่: mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( -> select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY -> where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); | id | select_type …

1
ตัวเลือกการบีบอัดสำหรับจัดเก็บข้อความจำนวนมากใน Postgres มีอะไรบ้าง
ฉันต้องการเก็บข้อความจำนวนมากใน Postgres ส่วนใหญ่บันทึกคำสั่งและผลลัพธ์ของคำสั่งที่รันเป็นเวลานานและจำเป็นต้องทราบว่ามีการตั้งค่าบางอย่างที่สามารถช่วยบีบอัดข้อมูลอย่างโปร่งใสด้วยเครื่องมือเช่น zlib หรือวิธีอื่น ๆ . ข้อมูลเป็นข้อมูลอ่านอย่างเดียวเป็นหลักดังนั้นการเขียนไม่ใช่ปัญหา

1
ต้องการสำรองฐานข้อมูล MySQL data_schema, performance_schema, mysql และ phpmyadmin หรือไม่?
ฉันรู้ว่าไม่จำเป็นต้องสำรองinformation_schemaฐานข้อมูล แต่เกี่ยวกับฐานข้อมูลต่อไปนี้ (นอกเหนือจากฐานข้อมูลที่ผู้ใช้กำหนด)? performance_schema mysql phpmyadmin (ดังนั้นในกรณีที่มีปัญหาและเราต้องเริ่มจากศูนย์ (ติดตั้ง MySQL ใหม่) ซึ่งฐานข้อมูลใดที่ฉันต้องวางกลับ)?

3
มีข้อดีที่จะไม่แบ่งพาร์ติชันให้สอดคล้องกับดัชนีหรือไม่?
ฉันมีสิทธิ์จัดการตาราง OLAP ที่แบ่งพาร์ติชันขนาดใหญ่ ในขณะที่ตรวจสอบตารางนี้ฉันสังเกตเห็นว่าดัชนีตัวใดตัวหนึ่งไม่ตรงกับชุดรูปแบบการแบ่งพาร์ติชัน เนื่องจากผู้เขียนไม่พร้อมใช้งานและการค้นหาของ Google ที่สร้างขึ้นอย่างระมัดระวังจึงไม่ส่งคืนผลลัพธ์ที่เป็นประโยชน์ใด ๆ ฉันไม่แน่ใจว่าสิ่งนี้เป็นไปโดยเจตนาหรือไม่ตั้งใจ มีเหตุผลใดที่จะไม่จัดพาร์ติชันดัชนีใน SQL Server 2008?

3
รับ MS SQL Server เพื่อปล่อยพื้นที่ดิสก์
ตารางฐานข้อมูลที่มีการจัดการไม่ดีมีจำนวนมหาศาล 48 + กิ๊กบันทึกเด็กกำพร้า ฉันพยายามทำความสะอาดและทำให้ฮาร์ดไดรฟ์เต็มอันตรายของฉันกลับสู่สภาวะปกติ ฉันจะลบประมาณ 400 ล้านบันทึกจากตารางนี้ สิ่งนี้กำลังทำงานอยู่ขณะที่ฉันพิมพ์ ฉันสังเกตเห็นว่าฉันไม่เห็นการลดลงของพื้นที่ว่างในฮาร์ดไดรฟ์ของฉัน แต่ฉันเห็นหน่วยความจำลดลงในแบบสอบถามตารางระบบฉันกำลังทำงานเพื่อให้ได้ขนาดตาราง ฐานข้อมูลใช้ "Simple Recovery Model" มีคำถามมากมายที่คล้ายกับสิ่งนี้พร้อมคำตอบที่บอกว่าคุณจำเป็นต้องลดขนาดฐานข้อมูล แต่พวกเขายังอธิบายต่อไปว่าสิ่งเลวร้าย / น่ากลัวนี้เกิดขึ้นเพราะข้อมูลที่อยู่อย่างกระจัดกระจาย ฯลฯ เนื่องจากฐานข้อมูลไม่ควรมีขนาดนี้ มันยังไม่ดีสำหรับฉันที่จะหดหรือไม่ นี่คือฐานข้อมูลการผลิต หากฉันย่อขนาดลงมันจะทำให้ระบบหยุดทำงานหรือล็อคฐานข้อมูลหรือไม่ ใน SQL Server Management Studio คุณมีสองตัวเลือกสำหรับการย่อขนาดฐานข้อมูลหรือไฟล์ ให้สถานการณ์ของฉันสิ่งที่จะเป็นตัวเลือกที่ดีที่สุด? มีกฎเกี่ยวกับเปอร์เซ็นต์ของพื้นที่ว่างที่ควรมีฐานข้อมูลหรือไม่ การอ่านคำอธิบายแท็กของการย่อขนาดทำให้ฉันไม่ต้องการทำเช่นนั้น มีวิธีอื่นอีกไหม?

1
จะทราบได้อย่างไรว่าไฟล์สำรองประกอบด้วย CDC หรือไม่
การใช้ SQL Server 2008 ถึงปี 2014 ฉันรู้วิธีสำรองและกู้คืนฐานข้อมูลด้วย Change Data Capture enabled (CDC) แต่สิ่งที่ฉันกำลังมองหาคือวิธีการสืบค้นไฟล์สำรองข้อมูลเต็มรูปแบบเพื่อตรวจสอบว่ามีข้อมูล CDC หรือไม่ สิ่งที่ดีมากจะเป็นเช่นRESTORE FILELISTONLYนั้นที่ได้รับรายชื่อไฟล์จากฐานข้อมูล แต่รับสถานะ CDC แทนเพื่อพิจารณาว่าการกู้คืนจะต้องใช้การตั้งค่าสถานะ KEEP_CDC หรือไม่ มีวิธีการตรวจสอบว่าการสำรองข้อมูลประกอบด้วยข้อมูล CDC หรือไม่ ขอบคุณ!

1
PostgreSQL bytea กับ smallint []
ฉันต้องการนำเข้าข้อมูลอนุกรมเวลาหลายช่องทางขนาดใหญ่ (100Mb - 1 GB) ลงในฐานข้อมูล PostgreSQL ข้อมูลมาจากไฟล์ฟอร์แมต EDFที่แบ่งข้อมูลเป็น "บันทึก" หรือ "ยุค" ซึ่งโดยทั่วไปแล้วแต่ละวินาที บันทึกยุคของแต่ละคนถือสัญญาณสำหรับแต่ละช่องข้อมูลเป็นอาร์เรย์ลำดับของจำนวนเต็มสั้น ฉันได้รับคำสั่งให้เก็บไฟล์ไว้ในฐานข้อมูลในกรณีเลวร้ายที่สุดในฐานะ BLOB ระบุว่าฉันต้องการตรวจสอบตัวเลือกที่จะช่วยให้ฉันทำอะไรเพิ่มเติมกับข้อมูลในฐานข้อมูลเช่นอำนวยความสะดวกในการค้นหาตามข้อมูลสัญญาณ แผนเริ่มต้นของฉันคือการจัดเก็บข้อมูลเป็นหนึ่งแถวต่อระเบียนยุค สิ่งที่ฉันพยายามชั่งน้ำหนักคือการจัดเก็บข้อมูลสัญญาณจริงตามประเภท bytea หรือ smallint [] (หรือแม้แต่ smallint [] []) ชนิด ใครช่วยแนะนำคนอื่นได้บ้าง ฉันสนใจค่าใช้จ่ายในการจัดเก็บและเข้าถึง การใช้งานมีแนวโน้มที่จะถูกแทรกหนึ่งครั้งอ่านเป็นครั้งคราวไม่เคยอัปเดต หากมีการห่อเป็นประเภทกำหนดเองได้ง่ายขึ้นซึ่งฉันสามารถเพิ่มฟังก์ชั่นสำหรับการวิเคราะห์การเปรียบเทียบบันทึกได้ดีกว่ามาก ไม่ต้องสงสัยเลยว่าฉันมีรายละเอียดน้อยมากดังนั้นอย่าลังเลที่จะเพิ่มความคิดเห็นเกี่ยวกับสิ่งที่คุณต้องการให้ฉันชี้แจง

5
ความเท่าเทียมกันทางคณิตศาสตร์ของคำสั่ง SQL สองคำสั่ง
มีวิธีการตรวจสอบความเท่าเทียมกันทางคณิตศาสตร์ของคำสั่ง SQL สองคำสั่งหรือไม่? ฉันมีคำสั่ง SQL สองคำ: SQL_STATEMENT_1 SQL_STATEMENT_2 การเรียกใช้ทั้งคำสั่งเกี่ยวกับข้อมูลและการเปรียบเทียบผลลัพธ์ไม่ได้ช่วยอะไรเลย ชุดคณิตศาสตร์เบื้องหลังคำสั่งจะต้องได้รับการประเมินเช่นเดียวกับตัวแก้สมการ ขอบเขตคำถามของฉันเป็นสิ่งที่ชอบ: เปรียบเทียบอื่น ๆ แล้วความเท่าเทียมกัน (มากกว่า, น้อยกว่า, LIKE, ... ) ขั้นตอนการจัดเก็บหรือทริกเกอร์ นิพจน์ตารางทั่วไป (ด้วย) ในขอบเขต: Subselects: WHERE other_id IN (เลือก id จาก other WHERE ... ) จับ

2
ส่งคืนการนับสำหรับหลายช่วงในคำสั่ง SELECT เดียว
ฉันมีตารางฐานข้อมูล Postgres fooที่มีคอลัมน์สำหรับscoreช่วงนั้นตั้งแต่ 0 - 10 ฉันต้องการให้แบบสอบถามส่งคืนจำนวนคะแนนทั้งหมดจำนวนคะแนนระหว่าง 0 ถึง 3 จำนวนคะแนนระหว่าง 4 และ 6 และจำนวนคะแนนระหว่าง 7 และ 10 สิ่งที่ชอบดังต่อไปนี้: SELECT COUNT(*) as total, COUNT( SELECT * from foo where score between 0 and 3; ) as low, COUNT( SELECT * from foo where score between 4 and 6; ) as …

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