คำถามติดแท็ก best-practices

แนวปฏิบัติที่ดีที่สุดได้รับการยอมรับโดยทั่วไปและไม่เป็นทางการว่าเป็นวิธีการและกระบวนการที่ได้รับการแสดงเมื่อเวลาผ่านไปเพื่อให้เหนือกว่าผู้ที่ได้รับจากวิธีการอื่น

2
การเปลี่ยนรหัสผ่าน“ sa” ต้องการการเริ่ม SQL ใหม่ (ในโหมดผสม) หรือไม่?
เราค้นพบบัญชี SQL "sa" ที่ใช้งานในลักษณะที่ไม่ควรเป็นดังนั้นเราจึงเปลี่ยนรหัสผ่าน sa ในอินสแตนซ์ SQL ของเราทั้งหมด (เรามี SQL 2005 ถึง 2017 เซิร์ฟเวอร์ที่ทำงานในโหมดการตรวจสอบสิทธิ์แบบผสมผู้ใช้และแอปพลิเคชันทั้งหมดควรใช้บัญชีโดเมนหรือบัญชี SQL ที่ไม่ใช่ sa เพื่อเชื่อมต่อฉันได้รับการตรวจสอบ แต่ไม่พบแอปอื่น ๆ ผู้ใช้หรือไม่ - spids ภายในโดยใช้บัญชี sa) คำถามเล็กน้อย: คำถามที่ 1: การเปลี่ยนรหัสผ่าน sa ต้องมีการรีสตาร์ท SQL หรือไม่ ฉันพบการอ้างอิงบางอย่างที่บอกว่าจำเป็นต้องเริ่มบริการ SQL ใหม่หลังจากเปลี่ยนรหัสผ่านบัญชี sa: DBA SE: การเปลี่ยนรหัสผ่าน sa SQLAuthority: เปลี่ยนรหัสผ่านของการเข้าสู่ระบบ SA โดยใช้ Studio การจัดการ มันเป็นเรื่องจริงเหรอ? หรือเฉพาะในกรณีที่ฉันเปลี่ยนโหมดการตรวจสอบสิทธิ์ หรือเฉพาะถ้าฉันเข้าสู่ระบบเป็นประจำเป็น …

1
ให้สิทธิ์การเข้าถึงตารางของฐานข้อมูลทั้งหมด
ฉันเพิ่งอยากจะแบ่งปันสิทธิการเข้าถึงปกติกับผู้ใช้คนหนึ่งของเซิร์ฟเวอร์และฉันตระหนักว่าง่ายCREATE USERและGRANT ALL ON DATABASEคำสั่งไม่ให้เขาทำงานที่เรียบง่ายSELECTกับข้อมูลที่ ฉันต้องการให้สิทธิ์ในตารางทั้งหมดจากฐานข้อมูลที่กำหนดไปยังผู้ใช้ที่ระบุ แต่ฉันไม่แน่ใจว่ามันเป็นความคิดที่ดีที่สุดที่จะอนุญาตให้เขาเข้าถึงสคีมาทั้งหมดหรือไม่publicเพราะฉันไม่รู้ว่าจะให้สิทธิ์บางอย่างหรือไม่ การเพิ่ม มีวิธีอื่น ๆ ?

2
MongoDB: ค้นหากระบวนการ mongos ร่วมกับแอพพลิเคชันเซิร์ฟเวอร์
ฉันต้องการถามคำถามเกี่ยวกับแนวปฏิบัติที่ดีที่สุดที่อธิบายไว้ในเอกสารนี้: http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf ใช้เราเตอร์แบบสอบถามหลายรายการ ใช้กระบวนการ mongos หลายตัวในหลายเซิร์ฟเวอร์ การปรับใช้ทั่วไปคือการค้นหากระบวนการ mongos บนแอ็พพลิเคชันเซิร์ฟเวอร์ซึ่งอนุญาตการสื่อสารโลคัลระหว่างแอ็พพลิเคชันและกระบวนการ mongos จำนวนกระบวนการ mongos ที่เหมาะสมจะขึ้นอยู่กับลักษณะของแอ็พพลิเคชันและการปรับใช้ พื้นหลังเล็กน้อยเกี่ยวกับการปรับใช้ของเรา เรามีโหนดแอพพลิเคชันเซิร์ฟเวอร์จำนวนมาก แต่ละกระบวนการรันหนึ่งกระบวนการที่ใช้ JVM ด้วย RESTful WS ที่ไร้สัญชาติ ตามแนวทางปฏิบัติที่ดีที่สุดนี้แนะนำให้ทุกโหนดเซิร์ฟเวอร์แอปพลิเคชันเดียวรันmongosกระบวนการของตัวเองซึ่งหมายความว่าจำนวนของกระบวนการ JVM เท่ากับจำนวนmongosกระบวนการเสมอ mongosกระบวนการทั้งหมดเชื่อมต่อกับ 3 เซิร์ฟเวอร์การกำหนดค่าและหลาย mongo shards (พร้อมชุดแบบจำลองภายในแต่ละ shard) แม้ว่าเราจะใช้การปรับใช้ที่ใช้ร่วมกัน แต่เราก็ไม่ได้ทำลายคอลเลกชันของเราจริงๆ ในความเป็นจริงเรามีฐานข้อมูลจำนวนมากซึ่งกระจายไปทั่วเศษทั้งหมดในช่วงเวลาที่สร้าง (และนี่เป็นกรณีการใช้งานหลักของเราสำหรับการแยกส่วนในขณะนี้) เนื่องจากแนวปฏิบัติที่ดีที่สุดแนะนำว่า "จำนวนกระบวนการ mongos ที่เหมาะสมจะขึ้นอยู่กับลักษณะของแอปพลิเคชันและการปรับใช้" ฉันเริ่มสงสัยว่าการใช้งานของเราmongosนั้นเหมาะสมหรือไม่หรือถ้ามันจะดีกว่าสำหรับเราที่จะมีmongosโหนดเฉพาะเซิร์ฟเวอร์แอปของเราเชื่อมต่อกับพวกเขาโดยไม่ต้องmongosทำงานในพื้นที่ คุณมีความคิดเห็นเกี่ยวกับวิธีที่ดีที่สุดในการตัดสินใจว่ามีmongosอินสแตนซ์ที่เหมาะสมจำนวนเท่าใดที่เกี่ยวข้องกับอินสแตนซ์ของเซิร์ฟเวอร์แอปพลิเคชันที่นับหรือขนาดของคลัสเตอร์ MongoDB เมื่อเร็ว ๆ นี้เราเริ่มพิจารณาการจัดการคลัสเตอร์สำหรับบริการเว็บไร้สัญชาติของเราซึ่งฉันหมายถึงเครื่องมือเช่น Docker, Apache Mesos และ Kubernetes …

2
มีความแตกต่างระหว่างการวางนามแฝงคอลัมน์ที่จุดเริ่มต้นหรือจุดสิ้นสุดของคำนิยามคอลัมน์หรือไม่?
ฉันเคยเห็นและเขียนชื่อแทนคอลัมน์เป็นเสมอ SELECT 1 as ColumnName แต่วันนี้เจอคำถามที่ใช้ SELECT ColumnName = 1 มีความแตกต่างในวิธีการเรียกใช้แบบสอบถามทั้งสองนี้อย่างไร หรือมีมาตรฐานในกลุ่ม DBA เกี่ยวกับอันไหนที่จะใช้? ส่วนตัวผมคิดว่า 2 จะง่ายต่อการอ่าน / รักษาสำหรับคำจำกัดความคอลัมน์อีกต่อไป (ตัวอย่างที่ดีที่นี่จากบทความนี้ ) แต่ผมไม่เคยเห็นไวยากรณ์ที่ 2 ก่อนที่จะนำมาใช้ในวันนี้เพื่อให้กำลังสงสัยว่าถ้ามีเหตุผลบางอย่างที่ฉันไม่ควรจะเป็น ใช้มัน

2
ใช้กรณีเดียวกันเมื่อเงื่อนไขสำหรับคอลัมน์แบบสอบถามจำนวนมาก
มีวิธี "ดีกว่า" ในการเขียนSELECTประโยคใหม่ที่มีคอลัมน์จำนวนมากใช้CASE WHENเงื่อนไขเดียวกันเพื่อให้มีการตรวจสอบเงื่อนไขเพียงครั้งเดียวหรือไม่ ดูตัวอย่างด้านล่าง SELECT CASE testStatus WHEN 'A' THEN 'Authorized' WHEN 'C' THEN 'Completed' WHEN 'P' THEN 'In Progress' WHEN 'X' THEN 'Cancelled' END AS Status, CASE testStatus WHEN 'A' THEN authTime WHEN 'C' THEN cmplTime WHEN 'P' THEN strtTime WHEN 'X' THEN cancTime END AS lastEventTime, CASE …

1
แนวทางปฏิบัติที่ดีที่สุดสำหรับการเชื่อมต่อฐานข้อมูลที่อยู่ในภูมิภาคทางภูมิศาสตร์ที่แตกต่างกัน
เรากำลังจะตั้งค่าเซิร์ฟเวอร์ SQL ในประเทศต่างๆ เราจำเป็นต้องเชื่อมโยงพวกเขา แต่เราไม่จำเป็นต้องมีการเชื่อมโยงโดยตรง (เช่นในเซิร์ฟเวอร์ที่เชื่อมโยง) กล่าวอีกนัยหนึ่งพวกเขาสามารถเป็นคู่อย่างอิสระ มันจะดีกว่าที่จะเชื่อมต่อพวกเขาผ่าน VPN และให้พวกเขาเป็นเซิร์ฟเวอร์ที่เชื่อมโยงหรือใช้การเชื่อมต่อหลวมผ่านบริการเว็บ? โดย "ดีกว่า" ฉันหมายถึงความมั่นคง

1
แนวปฏิบัติที่ดีที่สุดในปัจจุบันเกี่ยวกับการปรับขนาด varchar ใน SQL Server คืออะไร
ฉันพยายามเข้าใจวิธีที่ดีที่สุดในการตัดสินใจว่าคอลัมน์ varchar ขนาดใหญ่ควรเป็นอย่างไรทั้งจากมุมมองการจัดเก็บและประสิทธิภาพ ประสิทธิภาพ จากการวิจัยของฉันดูเหมือนว่าควรใช้ varchar (สูงสุด) เฉพาะในกรณีที่คุณต้องการเท่านั้น นั่นคือถ้าคอลัมน์จะต้องรองรับมากกว่า 8000 ตัวอักษรเหตุผลหนึ่งคือการขาดการจัดทำดัชนี (แม้ว่าฉันน่าสงสัยเล็กน้อยของการจัดทำดัชนีในเขตข้อมูล varchar โดยทั่วไปฉันค่อนข้างใหม่กับหลักการ DB แม้ว่าอาจจะไม่มีมูลเลย ) และการบีบอัด (ยิ่งกังวลเรื่องพื้นที่เก็บข้อมูล) ในความเป็นจริงแล้วคนทั่วไปดูเหมือนจะแนะนำให้ใช้เฉพาะสิ่งที่คุณต้องการเมื่อทำ varchar (n) .... การ oversize ไม่ดีเพราะการสืบค้นจะต้องคำนึงถึงขนาดสูงสุด แต่ก็มีการระบุด้วยว่าเครื่องยนต์จะใช้ขนาดครึ่งหนึ่งที่ระบุไว้เป็นค่าประมาณขนาดเฉลี่ยจริงของข้อมูล นี่หมายความว่าเราควรกำหนดจากข้อมูลว่าขนาดเฉลี่ยคืออะไรเพิ่มขนาดเป็นสองเท่าและใช้เป็น n สำหรับข้อมูลที่มีค่าความแปรปรวนต่ำมาก แต่ไม่เป็นศูนย์ นี่หมายถึงการขยายขนาดเกินขนาดสูงสุด 2 เท่าซึ่งดูเหมือนจะมาก แต่อาจไม่ใช่หรือ ข้อมูลเชิงลึกจะได้รับการชื่นชม ที่เก็บข้อมูล หลังจากอ่านเกี่ยวกับวิธีการทำงานของหน่วยเก็บข้อมูลแบบ in-row และ out-of-row และโปรดทราบว่าการจัดเก็บข้อมูลจริงนั้น จำกัด อยู่ที่ข้อมูลจริงฉันคิดว่าตัวเลือกของ n นั้นมีพื้นที่เก็บข้อมูลน้อยมากหรือไม่มีเลย ทำให้แน่ใจว่ามันใหญ่พอที่จะเก็บทุกอย่างไว้ได้) แม้แต่การใช้ varchar (สูงสุด) …

2
หากไม่มีแผนที่จะถอนการติดตั้งโฟลเดอร์ Log and Update Cache ในโฟลเดอร์ Setup Bootstrap จะถูกลบออกได้หรือไม่?
ฉันมี SQL Server หลายเวอร์ชันใช้สำหรับการทดสอบติดตั้งบนแล็ปท็อปของฉัน (2012, 2014, 2016 และ 2017) ฉันสังเกตเห็นเมื่อวันก่อนว่ามีโฟลเดอร์ที่มีไฟล์เวอร์ชันก่อนหน้าตลอดการอัพเดท (SPs, CUs) ในทุกรุ่นมีพื้นที่ว่างพอสมควร: (ในC: \ Program ไฟล์ (x86) \ Microsoft SQL Server \ ) 110\Setup Bootstrap\Log - 91.8 MB (818 files) 110\Setup Bootstrap\Update Cache - 608 MB (2,382 files) (โฟลเดอร์ทั้งหมดด้านล่างอยู่ภายใน: C: \ Program Files \ Microsoft SQL Server \ ) …

4
เหตุใดการผสมการเรียงคอลัมน์ในฐานข้อมูลเดียวจึงถือว่าไม่ดี
มีสองเหตุผลที่ทำให้ฉันถามคำถามนี้: tSQLt เฟรมเวิร์กการทดสอบ T-SQL tSQLt พิจารณาว่าเป็นปัญหาของ"High Severity"เมื่อมีคอลัมน์ที่มีการจัดเรียงที่ไม่ใช่ค่าเริ่มต้น ผู้เขียนการทดสอบระบุสิ่งต่อไปนี้: ฉันไม่แนะนำให้ทุกคอลัมน์สตริงควรมีการเปรียบเทียบที่ตรงกับการเปรียบเทียบเริ่มต้นสำหรับฐานข้อมูล ฉันขอแนะนำว่าเมื่อมันแตกต่างกันควรมีเหตุผลที่ดี กระนั้นความรุนแรงของการทดสอบที่ล้มเหลวก็ถือว่าสูง การปรับใช้ Octopus ในขณะที่กำหนดค่าเซิร์ฟเวอร์การปรับใช้ Octopus การตั้งค่าล้มเหลวด้วยข้อผิดพลาด FATAL ในระหว่างการเริ่มต้นของ OctopusServer-instance บทความที่เกี่ยวข้องกับข้อผิดพลาดข้อความไม่ได้อธิบายว่าทำไมนี้เป็นความต้องการ แต่เพียงระบุว่ามันจะเป็นความจำเป็นสำหรับการใช้งานในอนาคตจากการรวมทั้งปลาหมึกรุ่น 3.8 ในฐานะที่เป็นกล่องด้านข้างแพคเกจ CI-tool ของ RedGate นั้นเป็นชุดDLM Automation Suiteรองรับการปรับใช้ที่มีการเปรียบเทียบที่หลากหลายโดยไม่มีการร้องเรียน คำแนะนำในการคงการเรียงคอลัมน์ทั้งหมดไว้เป็นค่าเริ่มต้นของฐานข้อมูลดูเหมือนจะเป็นแนวทางหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับฉัน เหตุใดจึงถือว่าข้อผิดพลาดร้ายแรงบางรายการ

4
ช่วยฉันเลือกชุดค่าระดับ RAID สำหรับอินสแตนซ์ของ SQL Server 2008
ฉันจะสร้างเซิร์ฟเวอร์ IBM 3400 ขึ้นใหม่ตั้งแต่ต้น เซิร์ฟเวอร์นี้ทุ่มเทให้กับอินสแตนซ์ SQL Server 2008 ที่ทำงานบน Windows 2008 R2 ฉันจะสร้างการกำหนดค่า RAID ใหม่ ฉันมีไดรฟ์ SCSI 73 GB 6 ตัวในเครื่องและตัวควบคุม IBM ServerRAID 8K อะไรจะเป็นวิธีที่ดีในการตั้งค่าระดับ RAID? ฉันควรจะมีสองสามหรือหนึ่งเขตข้อมูลใน controler ของฉัน? ฉันกำลังพิจารณาที่จะทำหนึ่งในวิธีแก้ปัญหาต่อไปนี้: ใช้ดิสก์ทั้งหมดและสร้างพูล RAID 10 ใช้ดิสก์ 4 ดิสก์สำหรับพูล RAID 1e และใช้เพื่อเก็บข้อมูลฐานข้อมูลและระบบปฏิบัติการและใช้ดิสก์ 2 ดิสก์อื่นในพูล RAID 0 และใช้เพื่อเก็บบันทึกฐานข้อมูล รวมกันบ้าง หน่วยแถบขนาดใหญ่กว่าดีกว่าหรือไม่ เซิร์ฟเวอร์นี้จะเป็นสมาชิกของฐานข้อมูลที่จำลองแบบแล้ว ภารกิจหลักของมันคือการรายงานและดึงข้อมูลโดยมีเอเจนต์การจำลองแบบเท่านั้นที่ทำการเขียน ขนาดของฐานข้อมูลอยู่ที่ประมาณ 90 …

3
เป็นวิธีที่ดีที่สุดในการเพิ่มการจัดการข้อผิดพลาดใน SQL 2005 procs จัดเก็บคืออะไร?
เป็นวิธีที่ดีในการทำให้ procs ที่เก็บไว้มีประสิทธิภาพเพียงพอที่จะสามารถปรับขนาดได้ดีมากและยังมีการจัดการข้อผิดพลาดอะไร นอกจากนี้วิธีที่ดีที่สุดในการจัดการสถานการณ์ข้อผิดพลาดหลายอย่างใน proc ที่จัดเก็บและมีระบบการตอบรับอัจฉริยะที่จะส่งคืนข้อมูลข้อผิดพลาดที่มีความหมายไปยังแอพที่โทรอยู่คืออะไร?

2
ดัชนีแนวทางปฏิบัติที่ดีที่สุดที่ไม่ได้ใช้
จากแบบสอบถามนี้ถ้าฉันเห็นจำนวนการอ่านน้อย (ใกล้เคียงกับ 0 หรือ 0, เช่น 1 หรือ 2) และการอัปเดตผู้ใช้จำนวนมากหรือปานกลาง (ฉันไม่สามารถค้นหาแทรกหรือลบด้วยแบบสอบถามนี้) จำนวนแถวขนาดใหญ่ฉันควรลบดัชนีในทฤษฎี SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS ObjectName , p.rows TableRows , i.name AS [INDEX NAME] , (user_seeks + user_scans + user_lookups) AS TotalReads , user_updates UserUpdates FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] AND i.index_id = …


2
การจัดเก็บที่อยู่การเรียกเก็บเงินวิธีปฏิบัติที่ดีที่สุดในตารางคำสั่งซื้อ
ใครสามารถช่วยฉันเข้าใจคำตอบของผู้ใช้นี้สำหรับตารางตำแหน่งที่อยู่ของลูกค้า ฉันต้องการวิธีการที่ดีในการจัดเก็บที่อยู่ในตารางคำสั่งซื้อ สิ่งที่ฉันกำลังมองหาคือวิธีการตั้งค่าที่อยู่ของฉันดังนั้นเมื่อฉันแก้ไขที่อยู่ใบสั่งจะไม่ได้รับผลกระทบจากความจริงที่ว่าลูกค้าอัปเดตที่อยู่หรือย้ายที่อยู่ ตามที่สคีมาของฉันนั้นดูคล้ายกับ: Person |EntityID| EntityAddress |EntityID|AddressID| Address |AddressID|AddressType|AddressLine1|AddressLine2| Order |OrderID|BillingAddressID|

3
การจัดเก็บเวลาด้วยมิลลิวินาทีในฐานข้อมูล
เพียงคำถามสั้น ๆ เกี่ยวกับการจัดเก็บ "เวลา" ในฐานข้อมูล ฉันบันทึกเวลาที่ผู้ใช้ทำงานซึ่งอยู่ในรูปแบบ 00: 00: 00: 00 (ชั่วโมง, นาที, วินาที, มิลลิวินาที) เดิมทีฉันจะเก็บมันไว้TIMEแต่แล้วฉันก็รู้ว่า MySQL ไม่รองรับมิลลิวินาทีในประเภทนี้ ฉันจะจัดเก็บเวลาจริงที่ถ่ายจากนาฬิกาจับเวลาของผู้ใช้ไม่ใช่เวลาที่พวกเขาวิ่งและสิ้นสุด (นี่จะถูกคำนวณก่อนที่จะถูกแทรก) ประเภทเขตข้อมูลที่ดีที่สุดที่จะใช้คืออะไร ผมคิดว่าอย่างใดอย่างหนึ่งdoubleหรือfloatแต่ผมไม่แน่ใจว่าจะทำงานอย่างไร

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