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

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

1
ใช้ FLOATs กับ RAISERROR
ฉันใช้RAISERROR()เพื่อจัดเตรียมฟังก์ชั่นการทดสอบหน่วยพื้นฐาน (ตามที่นี่ ) แต่ฉันรู้สึกหงุดหงิดกับการไม่สามารถใช้งานได้FLOATsในข้อความแสดงข้อผิดพลาด ฉันรู้ว่าฉันสามารถส่งทุ่นไปที่สตริง แต่ฉันใช้RAISERRORในการทดสอบหน่วยเดียวทุกครั้งฉันไม่ต้องการเพิ่มโค้ดอีกบรรทัดหนึ่งสำหรับการทดสอบทุกครั้ง (การทดสอบหน่วยของฉันมีคำพูดมากพอ!) มีวิธีในการแปลง / แปลงแบบอินไลน์ภายในRAISERRORรายการพารามิเตอร์หรือไม่? หรือมีวิธีอื่นในการแก้ไขข้อบกพร่องนี้หรือไม่? อัปเดต: ดังนั้นในที่สุดสิ่งที่ฉันหวังว่าฉันจะทำได้คือ: RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) น่าเสียดายที่RAISERRORไม่ใช้% f หรือลอยโดยทั่วไป ดังนั้นฉันต้องทำสิ่งนี้แทน: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ... ซึ่งดูเหมือนจะยุ่งเหยิงเมื่อมันกระจายผ่านการทดสอบหน่วยนับสิบ ดังนั้นฉันต้องการต้มมันลงไปที่สิ่งนี้: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) …
11 sql-server  t-sql 

2
วิธีการป้องกันการกระจายตัวของดัชนีรายวัน 99%
ฉันมีตารางคะแนนสูงสุดสำหรับผู้เล่น 100,000 คนที่ถูกแทรกลงในวันละ 2 ครั้งโดยมีหนึ่งระเบียนต่อผู้เล่นหนึ่งคน ในตอนท้ายของวันการกระจายตัวของดัชนีสำหรับดัชนีในตารางนั้นคือ 99% มีวิธีการป้องกันโดยการปรับการตั้งค่า? CREATE TABLE HighScore( [id] [int] IDENTITY(1,1) NOT NULL, [user] [int] NULL, [player] [int] NULL, [round] [tinyint] NULL, [group] [int] NULL, [rank] [int] NULL, [delta] [int] NULL, [roundpoints] [int] NULL, [totalpoints] [int] NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, …

1
จัดเรียงข้อมูล SQL Server และไฟล์บันทึกการทำงานด้วย MoveFile API
นายจ้างของฉันกำลังมองหาการปรับใช้ซอฟต์แวร์การจัดเรียงข้อมูล NTFS ที่ใช้ Windows MoveFile API เพื่อจัดเรียงข้อมูลไฟล์ที่เปิดอยู่ สิ่งนี้จะได้รับการปรับใช้กับเซิร์ฟเวอร์ SQL Server นับพันที่รัน SQL เวอร์ชันตั้งแต่ 2005-2012 และ Windows เวอร์ชั่นตั้งแต่ปี 2003 และ 2008 R2 หากเป็นเรื่องสำคัญผลิตภัณฑ์ที่ฉันกำลังพูดถึงคือ PerfectDisk แต่ฉันเชื่อว่ามีโปรแกรมที่คล้ายกันซึ่งทำงานในลักษณะเดียวกัน การทดสอบจนถึงตอนนี้ยังไม่พบปัญหามากมายนอกเหนือจากปัญหาประสิทธิภาพ I / O เป็นครั้งคราวซึ่งไม่แปลกใจและสามารถแก้ไขได้ด้วยการจัดกำหนดการใหม่และปรับการจัดระเบียบ อย่างไรก็ตามฉันกังวลเกี่ยวกับความเสี่ยงของข้อมูลที่เสียหายมากขึ้น ใครบ้างที่นี่มีประสบการณ์ใช้งานซอฟต์แวร์ประเภทนี้ในการผลิตบนเซิร์ฟเวอร์ฐานข้อมูลหรือไม่ คุณเคยประสบปัญหาข้อมูลเสียหายหรือไม่? ฉันค่อนข้างไม่สบายใจเกี่ยวกับเรื่องนี้แม้ว่าจะไม่สามารถหาหลักฐานที่ชัดเจนว่าเป็นปัญหา ขอบคุณสำหรับคำตอบใด ๆ แก้ไขเพื่อเพิ่ม: ความคิดที่น่ากลัวนี้เพิ่งถูกลืมไปแล้วอาจเป็นส่วนหนึ่งเนื่องจากคำเตือนบางอย่างที่ฉันให้ไว้

1
เหตุใด 10 ^ 37/1 จึงเกิดข้อผิดพลาดทางคณิตศาสตร์มากเกินไป
ต่อแนวโน้มล่าสุดของฉันในการเล่นกับจำนวนมากฉันเพิ่งต้มข้อผิดพลาดที่ฉันกำลังทำงานลงไปที่รหัสต่อไปนี้: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; ผลลัพธ์ที่ฉันได้รับสำหรับรหัสนี้คือ: 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. อะไร? ทำไมการดำเนินการ 3 รายการแรกถึงทำงานได้ …

3
สคริปต์พุ่งพรวดใน ubuntu สำหรับ mongodb
ฉันยังใหม่กับ linux และ mongodb ฉันได้ติดตั้ง mongodb บน Ubuntu แล้ว แต่ฉันต้องการรันอีกหนึ่งอินสแตนซ์บนพอร์ตอื่น ตามที่ฉันเข้าใจจากคำถามและฟอรัมอื่น ๆ จะต้องมีสคริปต์พุ่งพรวด /programming/7300109/ubuntu-start-upstart-second-instance-of-mongodb แต่ฉันไม่สามารถค้นหาหรือค้นหาสคริปต์ upstart บนเซิร์ฟเวอร์ของฉันถ้าฉันสร้างสคริปต์ upstart ฉันควรค้นหาตำแหน่งใดเพื่อเริ่มเป็นบริการ หรือมีวิธีอื่นที่เหมาะสมและง่ายต่อการเริ่มต้นอินสแตนซ์อื่นของ mongodb บนเซิร์ฟเวอร์เดียวกัน แต่มีพอร์ตต่างกัน

2
พยายามเข้าใจ SHOW SLAVE STATUS ใน MySQL
ฉันมีการตั้งค่าการจำลองแบบ Master-Slave และดูเหมือนว่ามันจะทำงานได้ดี ด้านล่างเป็นผลลัพธ์ของSHOW SLAVE STATUSคำสั่ง: show slave STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: *.*.*.* Master_User: repliV1 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 10726644 Relay_Log_File: mysqld-relay-bin.000056 Relay_Log_Pos: 231871 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: data1 Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: …

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

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

2
แจ้งเตือนเมื่องานใด ๆ ในหมวดหมู่งานล้มเหลว
เป็นไปได้หรือไม่ที่จะมีการตั้งค่าการแจ้งเตือนใน SQL Server 2008 ที่จะส่งอีเมลเมื่อใดก็ตามที่งานในประเภทเฉพาะล้มเหลว? ผมสงสัยว่าเพราะผมต้องการที่จะตั้งขึ้นได้ตลอดเวลาอีเมลสมัครสมาชิก SSRS ล้มเหลว - และทั้งหมดของการสมัครรับข้อมูลเหล่านี้เป็นงานในหมวดหมู่ของเซิร์ฟเวอร์รายงาน แก้ไข - ปรากฎว่าเมื่อการสมัครสมาชิก SSRS ล้มเหลวงานของตัวเองไม่ได้ล้มเหลวดังนั้นคำถามของฉันจะไม่ใช้กับการตรวจสอบการสมัครสมาชิก SSRS อย่างไรก็ตามฉันยังต้องการทราบสำหรับงานอื่น ๆ ที่เราทำงานในสภาพแวดล้อมของเรา

2
MongoDB Replica Set SECONDARY ติดอยู่ในสถานะ 'ROLLBACK`
ในระหว่างการอัพเดทอัตโนมัติครั้งล่าสุดของ MongoD ของเราPRIMARYเมื่อPRIMARYก้าวลงมาอย่างถาวรก็เข้าสู่ROLLBACKสถานะอย่างถาวร หลังจากหลายชั่วโมงในROLLBACKสถานะยังคงไม่มี.bsonไฟล์ย้อนกลับในrollbackไดเร็กทอรีในไดเร็กทอรีฐานข้อมูล mongodb ที่และบรรทัดนี้ในไฟล์บันทึกของเรา: [rsSync] replSet syncThread: 13410 replSet too much data to roll backดูเหมือนว่าจะบ่งชี้ว่าROLLBACKกระบวนการล้มเหลว ฉันต้องการความช่วยเหลือในการวิเคราะห์สิ่งที่ผิดพลาด ดูเหมือนจะมีการย้อนกลับสองแบบที่แตกต่างกันเกิดขึ้นในบันทึกของเรา เป็นเช่นนั้นหรือเป็นกรณีที่ใช้เวลา 3 ชั่วโมง? หากการย้อนกลับครั้งแรก (เวลา 19:00 น.) ประสบความสำเร็จทำไมไม่มีสิ่งใดปรากฏในrollbackไดเรกทอรีของคุณ มีการเดาสาเหตุของคำเตือนเหล่านั้นหรือไม่? นั่นอาจเกี่ยวข้องกับความล้มเหลวในการย้อนกลับใช่ไหม เราสูญเสียข้อมูลไป 18 วินาทีเนื่องจากครั้งแรกROLLBACKใช่หรือไม่ มีวิธีแก้ปัญหาทั่วไปสำหรับปัญหา "ติดอยู่ในROLLBACKสถานะ" หรือไม่? เราต้องไปที่ฐานข้อมูลทั้งหมดของเราและซิงค์จากหลักอีกครั้ง บรรทัดบันทึกที่เกี่ยวข้องคือ: # Primary coming back after restart... Tue May 15 19:01:01 [initandlisten] MongoDB starting …
11 mongodb  rollback 

2
มีวิธีการตั้งค่าในการโหลด / อ่านสาขาต้นไม้ด้วย HierarchyId
ฉันกำลังเล่นกับ HierarchyId และฉันยังไม่ได้คิดวิธีที่จะทำตามต่อไปนี้: แทรกทรีย่อยทั้งหมดในคราวเดียว ดึงทรีย่อยทั้งหมดในครั้งเดียว คำถามนี้เกี่ยวข้องกับคำถามก่อนหน้าของฉันและฉันสงสัยว่าวิธีเดียวที่จะทำงานสองอย่างนี้ให้สำเร็จด้วย HierarchyId คือหนึ่งโหนดหรือหนึ่งระดับในแต่ละครั้ง หากฉันใช้เส้นทางที่เป็นรูปธรรมการกระทำทั้งสองอย่างสามารถทำได้อย่างง่ายดายโดยคำสั่งพื้นฐานเดียว (และไม่สำคัญ) ฉันกำลังคิดถึงอะไร แก้ไข: ฉันพลาดวิธีย้ายทรีย่อย แต่ฉันเรียนรู้จากความคิดเห็นของ Mikael Eriksson

5
ตัวสร้างโปรไฟล์ SQL มีผลต่อประสิทธิภาพของเซิร์ฟเวอร์หรือไม่?
ฉันกำลังประสบปัญหาที่ sql server 2008 ล้มเหลวสำหรับการโหลดสูง ฉันต้องการค้นหากรณีโหลดนั้นและจำเป็นต้องปรับโค้ดให้เหมาะสมเพื่อให้สามารถจัดการกับโหลดได้ ฉันพบบนอินเทอร์เน็ตว่าสามารถใช้ตัวสร้างโปรไฟล์ SQL เพื่อติดตามการโต้ตอบของฐานข้อมูลซึ่งสามารถวิเคราะห์ในภายหลังเพื่อค้นหาจุดที่แน่นอนที่เกิดปัญหา ฉันได้พบว่าเราจะเริ่มต้น sql profiler ได้อย่างไร แต่ตอนนี้คำถามของฉันคือการเริ่มตัวสร้างโปรไฟล์ sql ฉันจะส่งผลต่อประสิทธิภาพของเซิร์ฟเวอร์หรือไม่

3
การอ้างอิงฐานข้อมูลโดยทางโปรแกรมผ่าน T-SQL
ฉันกำลังเขียนขั้นตอนการจัดเก็บที่ใช้ชื่อฐานข้อมูลเป็นอาร์กิวเมนต์และส่งกลับตารางของดัชนีของฐานข้อมูลและระดับการกระจายตัวของพวกเขา ขั้นตอนการจัดเก็บนี้จะอยู่ในฐานข้อมูล DBA ของเรา (ฐานข้อมูลที่มีตารางที่ DBA ใช้สำหรับการตรวจสอบและปรับปรุงสิ่งต่าง ๆ ) ระบบที่เป็นปัญหาคือ SQL Server 2008 R2 ทั้งหมดหากมีความแตกต่าง ฉันมีการสืบค้นพื้นฐานแล้ว แต่ฉันพยายามหาชื่อจริงของดัชนี เพื่อความรู้ที่ดีที่สุดของฉันข้อมูลนั้นจะอยู่ในมุมมอง sys.indexes ของแต่ละคน ปัญหาเฉพาะของฉันพยายามอ้างอิงที่ดูโดยทางโปรแกรมจากกระบวนงานที่เก็บไว้ของฐานข้อมูลอื่น เพื่อแสดงให้เห็นว่านี่เป็นส่วนของแบบสอบถามที่มีปัญหา: FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id] AND p.index_id = b.index_id AND b.index_id != 0 แบบสอบถามทำงานได้ดีเมื่อดำเนินการจากฐานข้อมูลที่ระบุโดย @db_id เนื่องจากใช้มุมมอง sys.indexes ที่เหมาะสม ถ้าฉันพยายามเรียกสิ่งนี้จากฐานข้อมูล DBA ทุกอย่างจะเป็นโมฆะเนื่องจากมุมมอง sys.indexes …
11 sql-server 

6
ป้องกันการรีเซ็ต auto_increment id ในฐานข้อมูล Innodb หลังจากเซิร์ฟเวอร์รีสตาร์ท
ฉันเพิ่งอ่านว่าเนื่องจาก InnoDB คำนวณค่า AUTO_INCREMENT ใหม่เมื่อเซิร์ฟเวอร์รีสตาร์ตระเบียนใด ๆ ที่อยู่ท้ายสุดของรายการรหัสอาจมีการนำ ID กลับมาใช้ใหม่ ปกติแล้วนี่ไม่ใช่ปัญหาเพราะเมื่อผู้ใช้ลบทุกอย่างที่เกี่ยวข้องกับ ID จะถูกลบออกจากตารางอื่นด้วย แต่ฉันจงใจปล่อยให้โพสต์ฟอรัมของพวกเขากำพร้าติดป้ายว่า "โพสต์โดย = ผู้ใช้ # 123 =" ดังนั้นการสนทนาที่ผ่านมาจะถูกเก็บไว้ เห็นได้ชัดว่าควรใช้ ID ซ้ำนี่จะเป็นปัญหา ฉันไม่เคยมีปัญหานี้มาก่อนเพราะมีผู้ใช้ใหม่เพียงพอที่จะทำให้ ID ไม่สามารถนำมาใช้ซ้ำได้ด้วยวิธีนี้ อย่างไรก็ตามในการสมัครสมาชิกโครงการใหม่ของฉันนั้นหายากและการลบผู้ใช้ที่ไม่ได้ใช้งานบ่อย (โดยเฉพาะอย่างยิ่งเนื่องจากบัญชี "Open Alpha" ใช้งานได้ล่าสุดเป็นเวลาสามวันในการแสดงตัวอย่าง) และการใช้ ID ดังกล่าวได้เกิดขึ้นสามครั้งในขณะนี้ ฉันได้ "แก้ไข" ปัญหาด้วยการบันทึกค่าที่ถูกต้องสำหรับ AUTO_INCREMENT ที่อื่นและใช้สิ่งนั้นแทนการพึ่งพาค่าภายใน มีวิธีการที่แท้จริงที่จะให้ InnoDB จดจำค่าสุดท้ายจริงหรือไม่
11 mysql  innodb 

4
Supertype / Subtype ตัดสินใจเลือกระหว่างหมวดหมู่: ทำไม่ต่อเนื่องหรือทับซ้อนกันไม่สมบูรณ์
ฉันกำลังสร้างฐานข้อมูลสินค้าคงคลังที่เก็บฮาร์ดแวร์ไอทีเช่นคอมพิวเตอร์เดสก์ท็อปแล็ปท็อปสวิตช์เราเตอร์โทรศัพท์มือถือ ฯลฯ ฉันใช้รูปแบบ supertype / subtype ที่เก็บอุปกรณ์ทั้งหมดไว้ในตารางเดียวและข้อมูลเฉพาะ ใส่ลงในตารางย่อย กระอักกระอ่วนของฉันคือการเลือกระหว่างสองแบบต่อไปนี้: ในแผนภาพด้านบนอุปกรณ์ทั้งหมดแบ่งปันชนิดย่อยทั่วไป ตัวอย่างเช่นคอมพิวเตอร์เดสก์ท็อปและแล็ปท็อปจะมีระเบียนในตารางต่อไปนี้: อุปกรณ์, NetworkDevice สวิตช์จะมีระเบียนเป็น: อุปกรณ์, NetworkDevice เราเตอร์จะมีระเบียนใน: อุปกรณ์, NetworkDevice, WANDevice อุปกรณ์ใด ๆ ที่เราติดตามตำแหน่งจะมีการบันทึกในตำแหน่ง ข้อดีและข้อเสียบางประการที่ฉันคิดไว้สำหรับการตั้งค่านี้: Pro: การเลือกระเบียนตามเขตข้อมูลทั่วไปเช่นชื่อโฮสต์หรือ LocationID นั้นง่ายกว่า Pro: ไม่มีช่องว่าง คอนดิชั่น: ตารางที่ควรรวมอยู่ในการดำเนินการ CRUD สำหรับอุปกรณ์เฉพาะนั้นไม่ชัดเจนและอาจสร้างความสับสนใน DBAs ในอนาคต ในแผนภาพด้านล่างอุปกรณ์ทั้งหมดมีประเภทย่อยของตัวเอง (มีอุปกรณ์มากกว่าคลาสที่ไม่แสดงที่นี่) ในสถานการณ์เช่นนี้จะเห็นได้ชัดว่าระเบียนใดได้รับการแทรกหรือเลือกจากตาราง คอมพิวเตอร์เดสก์ท็อปและแล็ปท็อปไปที่คอมพิวเตอร์ ฯลฯ ข้อดีและข้อเสียบางประการที่ฉันคิดไว้สำหรับการตั้งค่านี้: Pro: เป็นที่ชัดเจนทันทีว่าตารางใดที่จะใช้สำหรับการดำเนินการ CRUD สำหรับชนิดย่อย Pro: ต้องใช้เพียงหนึ่งตารางสำหรับการดำเนินการ CRUD คอนดิชั่น: …

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