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

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

4
ผลลัพธ์การค้นหาข้อความแบบเต็มในเวลาจำนวนมากใน 'การกำหนดค่าเริ่มต้น FULLTEXT'
ขณะนี้ฉันกำลังพยายามเรียกใช้แบบสอบถามบางอย่างเทียบกับการถ่ายโอนข้อมูลของความคิดเห็นของ Stack Overflow นี่คือลักษณะของสคีมา: CREATE TABLE `socomments` ( `Id` int(11) NOT NULL, `PostId` int(11) NOT NULL, `Score` int(11) DEFAULT NULL, `Text` varchar(600) NOT NULL, `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `UserId` int(11) NOT NULL, PRIMARY KEY (`Id`), KEY `idx_socomments_PostId` (`PostId`), KEY `CreationDate` (`CreationDate`), FULLTEXT KEY `Text` (`Text`) …


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

3
ฉันจะพิจารณาอย่างน่าเชื่อถือได้อย่างไรว่าอินสแตนซ์ของ SQL Server ที่ระบุมี“ ล็อกหน้าในหน่วยความจำ” ถูกต้องหรือไม่?
"ล็อคหน้าในหน่วยความจำ" ด้านขวาสามารถมอบให้กับบัญชีบริการที่ใช้โดย SQL Server สิ่งนี้ทำให้ SQL Server สามารถป้องกันหน่วยความจำเพจได้กับดิสก์ ฉันสังเกตเห็นว่าเครื่อง SQL Server ของเราหลายเครื่องไม่มีนโยบายภายในที่กำหนดค่าไว้ให้ใช้สิทธิ์นี้สำหรับบัญชีบริการที่ใช้โดย SQL Server เนื่องจากเรามีเซิร์ฟเวอร์จำนวนมากจึงน่าเบื่อที่สุดที่จะตรวจสอบแต่ละเซิร์ฟเวอร์ด้วยตนเองโดยใช้คอนโซลการจัดการ "นโยบายระบบท้องถิ่น" มีแบบสอบถาม T-SQL, ขยายกระบวนงานที่เก็บไว้หรือวิธีอื่น ๆ ที่ฉันสามารถใช้เพื่อตรวจสอบว่าเซิร์ฟเวอร์ในคำถามมีสิทธิหรือไม่? ฉันต้องการที่จะไม่ใช้EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';เพราะมันต้องอาศัยการตรวจสอบบันทึกข้อผิดพลาด SQL Server ปัจจุบัน และบันทึกข้อผิดพลาดนั้นอาจไม่มีรายการที่เกี่ยวข้องสมมติว่าบันทึกได้ถูกยกเลิกเนื่องจากเซิร์ฟเวอร์รีสตาร์ทครั้งล่าสุด ฉันรู้ว่าฉันสามารถตรวจสอบบันทึกเก่าโดยแก้ไขพารามิเตอร์แรกจาก0เป็น1ฯลฯ อย่างไรก็ตามเราเก็บบันทึกข้อผิดพลาดเพียง 10 รายการเท่านั้นและนั่นอาจไม่เพียงพอ ฉันต้องการวิธีที่ไม่ปลอดภัยในการยืนยันการตั้งค่า

2
ฉันจะดำเนินการต่อหลังจากความล้มเหลวใน SSIS ได้อย่างไร
ฉันต้องการใช้งานบางอย่างดังต่อไปนี้: ในแพ็คเกจนี้ฉันต้องการวนซ้ำรายชื่อฐานข้อมูลโดยแก้ไขการตั้งค่าตัวจัดการการเชื่อมต่อแบบไดนามิก อย่างไรก็ตามความล้มเหลวครั้งแรกใน "การเชื่อมต่อทดสอบ" จะหยุดและล้มเหลวในการดำเนินการแพคเกจ แต่ฉันต้องการดำเนินการต่อ Foreach ของฉัน ฉันเข้าใจว่ามันควรจะเป็นไปได้ สิ่งที่ฉันได้ลองรวมถึงการล้อเล่นกับ "MaximumErrorCount"
12 ssis-2012 

3
CouchDB และเวอร์ชันเอกสาร
ขณะนี้ฉันกำลังทำงานกับแอปพลิเคชัน wiki-esque โดยใช้ CouchDB และฉันกำลังพยายามใช้รูปแบบการกำหนดเวอร์ชันเอกสาร วิธีที่ฉันเห็นมันมีสองวิธีในการทำสิ่งนี้: จัดเก็บแต่ละเวอร์ชันเป็นเอกสารแยกต่างหาก เก็บเวอร์ชันเก่าเป็นสิ่งที่แนบมากับเอกสารฉบับเดียว ตอนนี้ฉันมีรูปแบบการทำงาน # 1 เมื่อผู้ใช้แก้ไขเอกสารและบันทึกไว้แบ็คเอนด์ก่อนจะคัดลอกการแก้ไขก่อนหน้านี้ไปยังเอกสารใหม่จากนั้นบันทึกเวอร์ชันใหม่ แต่ละเอกสารมีอาร์เรย์ 'ประวัติ' ที่มีข้อมูลในแต่ละเวอร์ชัน (เอกสาร _id ของเวอร์ชันเก่าการประทับเวลาตัวแก้ไข ฯลฯ ) เนื่องจากอาร์เรย์ประวัตินี้อาจมีความยาวค่อนข้างมากสำหรับเอกสารที่อัปเดตบ่อยครั้งฉันจึงมีมุมมองที่ดึงข้อมูลประวัติเอกสารในระหว่างการอ่านปกติ (และอีกมุมมองหนึ่งสำหรับดึงข้อมูลประวัติ) คำถามของฉันคือ: ฉันรู้สึกไม่สบายใจเกี่ยวกับวิธีการปัจจุบันของฉันและกำลังคิดที่จะเปลี่ยนเป็นวิธีการ 'แนบ' แต่ฉันไม่แน่ใจ. ฉันหวังว่าคนที่รู้จัก CouchDB ดีกว่าฉัน (ฉันเพิ่งมาที่นี่แค่สองสามสัปดาห์ - และนี่เป็นโครงการแรกของฉันที่ใช้ CouchDB ... และ NoSQL) สามารถบอกได้ว่าข้อดีข้อเสียของแต่ละคน เข้าใกล้ หรืออาจมีโครงร่างเวอร์ชันอื่นที่ฉันมองเห็น

2
เหตุใดจึงต้องใช้ RDS มากกว่า EC2 สำหรับ Postgres
ฉันมีฐานข้อมูลกำลังทำงานอยู่บน EC2 เมื่อฉันต้องย้ายไปยังเครื่องที่ใหญ่กว่าคำถามของการใช้ RDS ขึ้นมา ราคา: ฉันจะได้รับEC2 c3.largeอินสแตนซ์ที่มีสอง SSDs (16GB แต่ละ) สอง vCPUs และหน่วยความจำ 4GB กับความต้องการ $ 0.132 ต่อชั่วโมง[1] ที่ใกล้เคียงที่สุด (ราคาพิจารณา) RDSเครื่องจะdb.m3.mediumราคา $ 0.125 ต่อชั่วโมง (เดี่ยว AZ) [2] เครื่องนี้มีจำนวนเดียวกันของหน่วยความจำ แต่เพียงหนึ่ง vCPU [3] นอกจากนี้ผมจะต้องมีค่าใช้จ่ายสำหรับการจัดเก็บและ io [2] ดังนั้นราคาจะคล้ายกันมากสำหรับสองคนนี้ ข้อดีสำหรับ EC2: ดังที่ได้กล่าวไปแล้ว vCPU อีกหนึ่งตัว ฉันสามารถวาง Write-Ahead-Log ลงบนดิสก์แผ่นที่สองเมื่อใช้ EC2 (การปรับปรุงประสิทธิภาพที่ยอดเยี่ยมเมื่อเขียนจำนวนมากไปยัง db) ฉันสามารถเรียกใช้pgbouncerบนอินสแตนซ์ EC2 ของฉัน …

1
การสลับข้อมูลล้มเหลวด้วย“ อนุญาตค่าที่ไม่ได้รับอนุญาตจากการตรวจสอบข้อ จำกัด หรือฟังก์ชั่นพาร์ติชันบนตารางเป้าหมาย”
รับดังต่อไปนี้ -- table ddl create table dbo.f_word( sentence_id int NULL, sentence_word_id int NULL, word_id int NULL, lemma_id int NULL, source_id int NULL, part_of_speech_id int NULL, person_id int NULL, gender_id int NULL, number_id int NULL, tense_id int NULL, voice_id int NULL, mood_id int NULL, case_id int NULL, degree_id int NULL, citation …

3
ตรวจสอบหรือ COMMIT เขียนลงดิสก์?
สมมติว่าสำหรับ SQLServer2008R2 และสูงกว่าพร้อมฐานข้อมูลโหมดการกู้คืนแบบเต็ม ฉันคิดเสมอ: เมื่อมีการทำธุรกรรม (COMMIT) ธุรกรรมนั้นจะถูกเขียนไปยังบันทึกธุรกรรมใน RAM เมื่อ CHECKPOINT เกิดขึ้น (หลังจากเวลาผ่านไปและ / หรือธุรกรรมบางอย่างและเกณฑ์อื่น ๆ ) ธุรกรรมระหว่าง CHECKPOINT ที่ผ่านมาและปัจจุบันจะถูกเขียนไปยังดิสก์ เมื่อบันทึกการสำรองข้อมูลเกิดขึ้นข้อมูลจะถูกเขียนไปยังไฟล์ MDF ฉันถูกไหม? เพื่อนร่วมงานของฉันบางคนบอกว่าฉันผิดและยากที่จะหาคำตอบที่ถูกต้องแม้กับ BOL ขอบคุณ!
12 sql-server 

2
การเขียนสคริปต์แผนการบำรุงรักษา
ฉันสร้างแผนการบำรุงรักษาสำหรับ SQL Server 2008 R2 โดยใช้ SQL Server Management Studio (SSMS) อย่างไรก็ตามฉันไม่สามารถส่งออก / แปลงเป็นสคริปต์ในกรณีที่ฉันต้องทำซ้ำบนเซิร์ฟเวอร์อื่น มีวิธีหรือไม่? ถ้าไม่มีจะมีวิธีใช้ SQL Server รุ่นใหม่กว่านี้ไหม

3
วิธีแทรกค่าลงในตารางจากสองตารางที่แตกต่างกันอย่างไร
ฉันมีสามโต๊ะ students table ------------------------------------ id(PK, A_I) | student_name | nationality teachers table ------------------------------------ id(PK, A_I) | teacher_name | email classroom table ---------------------- id(PK, A_I) | date | teacher_id(FK to teachers.id) | student_id(FK to students.id) ถ้าฉันได้รับชื่อครู ( davidตัวอย่าง) และ student_id ( 7ตัวอย่าง) และขอให้ใส่teacher_idลงในclassroomตารางตามidในteachersตารางฉันจะทำ: insert into classroom (date, teacher_id, student_id) select '2014-07-08', …

2
วิธีที่มีประสิทธิภาพในการเปรียบเทียบชุดข้อมูลขนาดใหญ่สองชุดใน SQL
ขณะนี้ฉันกำลังเปรียบเทียบชุดข้อมูลสองชุดที่มีStoreKey/ProductKeyชุดค่าผสมที่ไม่ซ้ำกัน ชุดข้อมูลชุดที่ 1 มีชุดค่าStoreKey/ProductKeyผสมที่ไม่ซ้ำกันสำหรับการขายระหว่างเริ่มมกราคม 2012 และสิ้นสุดพฤษภาคม 2014 (ผลลัพธ์ = 450K บรรทัด) ชุดข้อมูลที่ 2 มีชุดค่าStoreKey/ProductKeyผสมที่ไม่ซ้ำกันสำหรับการขายเริ่มต้นมิถุนายน 2014 จนถึงวันนี้ (ผลลัพธ์ = 190K บรรทัด) ฉันกำลังมองหาStoreKey/ProductKeyชุดค่าผสมที่อยู่ในชุดที่ 2 แต่ไม่ใช่ในชุดที่ 1 - คือผลิตภัณฑ์ใหม่ที่ขายตั้งแต่ต้นเดือนมิถุนายน จนถึงตอนนี้ฉันได้ทิ้งชุดข้อมูลสองชุดลงในตารางชั่วคราวสร้างดัชนีสำหรับทั้งสองตารางบนทั้งสองปุ่มแล้วใช้EXCEPTคำสั่งเพื่อค้นหารายการที่ไม่ซ้ำกัน วิธีที่มีประสิทธิภาพที่สุดในการเปรียบเทียบชุดข้อมูลขนาดใหญ่ดังกล่าวคืออะไร มีวิธีที่มีประสิทธิภาพมากกว่าในการทำการเปรียบเทียบขนาดใหญ่ประเภทนี้หรือไม่

1
ประโยชน์ของ Barracuda และการบีบอัด
ฉันได้อ่านเกี่ยวกับรูปแบบไฟล์ของ MySQL Antelope และ Barracuda เมื่อไม่นานมานี้และฉันสงสัยว่าฉันจะได้รับประโยชน์จากการมี Barracuda และการบีบอัดข้อมูลหรือไม่ เซิร์ฟเวอร์ของฉันใช้แอนทีโลปอยู่เพราะเป็นค่าเริ่มต้นของ MySQL ฉันมีปัญหากับหน่วยความจำหลายครั้งเนื่องจากฐานข้อมูลขนาดใหญ่ที่ฉันมี ฐานข้อมูลของฉันเพิ่มขึ้นทุกวัน ดูเหมือนว่าการบีบอัดจะให้ประโยชน์กับคนไม่กี่คนเช่น: http://www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/ ฉันเข้าใจว่าหน่วยความจำและพื้นที่ดิสก์สามารถลดลงได้ แต่ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งนี้หรือไม่ (อ้างอิงจากบทความ): "~ 5% โหลด CPU ตามด้านบน (จาก 80-100% ส่วนใหญ่รอ I / O) 0.01 เวลาค้นหาเฉลี่ยวินาทีโดยคีย์หลัก (จาก 1-20 วินาทีก่อนการแปลง) " ฉันคิดว่าสองสิ่งนี้จะไม่ดีขึ้นเพราะถ้าข้อมูลถูกบีบอัดเซิร์ฟเวอร์ต้องคลายการบีบอัดเพื่อรับข้อมูลต้นฉบับอีกครั้งดังนั้นจึงไม่เหมาะสมที่การใช้งาน CPU จะเพิ่มขึ้นใช่ไหม สิ่งนี้มีประโยชน์กับคุณในแอปพลิเคชันแบบอ่าน / เขียนหรือไม่ คุณจะแนะนำให้ฉันเปลี่ยนเป็น Barracuda และการบีบอัดไหม คุณตระหนักถึงปัญหาของ Barracuda หรือไม่? ดูเหมือนว่าคำตอบของคำถามต่อไปนี้จะกล่าวถึงปัญหาบางอย่าง แต่เนื่องจากมาจาก 2011 ฉันจะบอกว่าได้รับการแก้ไขแล้วในตอนนี้: …

3
อินสแตนซ์ MySQL ถ่วงเวลา“ กำลังทำดัชนี SYNC”
ปัญหา อินสแตนซ์ของ MySQL 5.6.20 ที่ทำงานอยู่ (ส่วนใหญ่เป็นเพียง) ฐานข้อมูลที่มีตาราง InnoDB กำลังแสดงแผงลอยเป็นครั้งคราวสำหรับการดำเนินการอัปเดตทั้งหมดเป็นระยะเวลา 1-4 นาทีกับ INSERT, UPDATE และ DELETE ทั้งหมดที่เหลืออยู่ในสถานะ "Query end" เห็นได้ชัดว่าโชคร้ายที่สุด บันทึกการสืบค้นที่ช้าของ MySQL กำลังบันทึกแม้กระทั่งแบบสอบถามที่ไม่สำคัญมากที่สุดด้วยเวลาสอบถามที่ไม่ได้ใช้งานหลายร้อยรายการที่มีการประทับเวลาเดียวกันสอดคล้องกับเวลาที่แผงลอยได้รับการแก้ไข: # Query_time: 101.743589 Lock_time: 0.000437 Rows_sent: 0 Rows_examined: 0 SET timestamp=1409573952; INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', …

1
อายุการใช้งานหน้า SQL Server 2012 รีเซ็ตเป็น 0 หลังจากนั้นประมาณ 50 วัน
ฉันสังเกตเห็นพฤติกรรมแปลก ๆ ในคลัสเตอร์ HA แบบ 2 เซิร์ฟเวอร์และฉันหวังว่าจะมีคนยืนยันความสงสัยของฉันหรืออาจมีคำอธิบายอื่น ๆ ... นี่คือการตั้งค่าของฉัน: การติดตั้ง SQL 2012 SP1 แบบ 2 เซิร์ฟเวอร์ SQL AlwaysOn HA เปิดใช้งานสำหรับฐานข้อมูลไม่กี่แห่ง ซีพียูคือ 2.4GHz, 4 คอร์ RAM คือ 34 GB (เป็นอินสแตนซ์ AWS ดังนั้นจึงเป็นเลขคี่) การใช้ทรัพยากรค่อนข้างต่ำ - เซิร์ฟเวอร์แต่ละเครื่องมีหน่วยความจำไม่เกิน 14+ GB และ SQL ไม่ได้ต่อยอดกับจำนวนหน่วยความจำที่ใช้ เวลาในการเข้าถึงดิสก์นั้นดี - ไม่ค่อยเกิน 15ms / อ่านหรือเขียน ฐานข้อมูลไม่ใหญ่ - 1 GB, …

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