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

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

3
แผนการดำเนินการไม่ได้ใช้ INDEX แต่ใช้การสแกนตาราง
ฉันรู้ว่าเมื่อใช้ดัชนีหรือการสแกนตาราง SQL Server จะใช้สถิติเพื่อดูว่าอันไหนดีกว่า ฉันมีตารางที่มี 20 ล้านแถว ฉันมีดัชนีใน (SnapshotKey, การวัด) และแบบสอบถามนี้: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand แบบสอบถามส่งคืนแถว 500k ดังนั้นแบบสอบถามจึงเลือกเพียง 2.5% ของแถวของตาราง คำถามคือทำไม SQL Server ไม่ใช้ดัชนี nonclustered ฉันมีและใช้การสแกนตารางแทน? มีการอัพเดทสถิติ ดีที่จะพูดถึงว่าประสิทธิภาพของแบบสอบถามนั้นดี สแกนตาราง ดัชนีบังคับ โครงสร้างตาราง / ดัชนี CREATE TABLE [t1]( [SnapshotKey] [int] NOT …

1
คำถามเกี่ยวกับรุ่นเก็บ tempdb
เราพบข้อผิดพลาดในวันนี้: ข้อผิดพลาด: 3967, ความรุนแรง: 17 และจากสิ่งที่ฉันสามารถบอกได้ว่ามันเป็น 'เวอร์ชั่นเต็มร้าน' สิ่งนี้ทำให้เกิดคำถามที่ฉันมีปัญหาในการตอบคำถามเนื่องจากที่ร้านของฉันเราไม่เคยมีข้อผิดพลาดนี้มาก่อน: หากมีขนาดสูงสุดที่กำหนดไว้ล่วงหน้า (ขึ้นอยู่กับขนาดtempdbโดยรวมหรืออย่างอื่น) มันเป็นแบบไดนามิกหรือไม่? มีการตั้งค่าที่จะทำให้เป็นแบบไดนามิกหรือไม่? เราสามารถตั้งค่าการแจ้งเตือนตามสิ่งนี้ได้หรือไม่? (เช่น DMVs เพื่อใช้ติดตามขนาด ฯลฯ )

1
เหตุใดฐานข้อมูล MSDB จึงเชื่อถือได้
การTRUSTWORTHYตั้งค่าอาจค่อนข้างอันตรายหากคุณไม่ระวังและยกเว้นในบางกรณีคำแนะนำคือให้ปิดไว้ อย่างไรก็ตามโดยค่าเริ่มต้นMSDBฐานข้อมูลได้TRUSTWORHTYตั้งค่าไว้ONตามค่าเริ่มต้น ฉันสงสัยว่าทำไม ฉันอ่านรายการนี้เป็นBOL แล้ว หมายเหตุโดยค่าเริ่มต้นการตั้งค่า TRUSTWORTHY ถูกตั้งค่าเป็น ON สำหรับฐานข้อมูล MSDB การเปลี่ยนแปลงการตั้งค่านี้จากค่าเริ่มต้นอาจส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิดโดยคอมโพเนนต์ของ SQL Server ที่ใช้ฐานข้อมูล MSDB แต่ฉันอยากรู้เกี่ยวกับเฉพาะ ทำไมMSDBต้องTRUSTWORTHYเปิดใช้งานโดยเฉพาะ ฟังก์ชั่นใช้งานอะไร?

1
การออกแบบโครงสร้างฐานข้อมูลมิตรภาพ: ฉันควรใช้คอลัมน์ที่มีหลายค่าหรือไม่
ว่าฉันมีตารางที่เรียกว่าUser_FriendListซึ่งมีลักษณะดังต่อไปนี้: CREATE TABLE User_FriendList ( ID ..., User_ID..., FriendList_IDs..., CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID) ); และให้เราสมมติว่าตารางดังกล่าวถือข้อมูลต่อไปนี้: + ---- + --------- + --------------------------- + | ID | User_ID | Friendlist_ID | + ---- + --------- + --------------------------- + | 1 | 102 | 2: 15: 66: 35: 26: 17: | + …

4
การสำรองข้อมูล SQL แตกต่างจากการสำรองข้อมูลเซิร์ฟเวอร์รายคืนตามปกติอย่างไร
แผนกไอทีของเราสำรองเซิร์ฟเวอร์ทั้งหมดทุกคืน (มีการติดตั้งอินสแตนซ์ SQL Server บนเซิร์ฟเวอร์นี้) ซึ่งควรสำรองเซิร์ฟเวอร์นั้นตลอดจนเครือข่ายทั้งหมดในกรณีที่มีบางอย่างผิดปกติ ... ดังนั้นผู้จัดการของฉันถามว่าการสำรองข้อมูล Full, Differential และ Log SQL ที่สำคัญของฉันคืออะไรเมื่อเทียบกับแผนกไอทีที่สำรองไว้? เพื่อประหยัดพื้นที่บนเซิร์ฟเวอร์ของเราแทนที่จะเก็บไฟล์เหล่านี้ไว้สองสามสัปดาห์แล้วลบมันเธอคิดว่าฝ่ายไอทีจะให้บริการ! ฉันรู้ว่ามันไม่ถูกต้องเพราะฉันสามารถกู้คืนได้ถึง 30 นาทีล่าสุดด้วยการสำรองข้อมูลบันทึกของฉันไอทีคืนค่าในวันถัดไป แต่นี่เป็นความแตกต่างเท่านั้นหรือไม่ เนื่องจากฉันบันทึก / ส่งไฟล์สำรองฐานข้อมูลของฉันไปยังเซิร์ฟเวอร์เดียวกันไอทีจะกู้คืน แต่ถ้าฉันไม่มีงานสำรองข้อมูลเหล่านี้ในแผนการบำรุงรักษาของฉันแล้วฉันสามารถกู้คืนอินสแตนซ์ SQL โดยไม่มีตารางใด ๆ ของเราธุรกรรม ... ฯลฯ ฉันจะได้รับสิทธินี้หรือไม่? คำแนะนำใด ๆ ที่จะได้รับการชื่นชมจริงๆ

1
SQL Server - ส่งออกตารางขนาดใหญ่โดยไม่มีคีย์หลัก
ฉันต้องการซิงค์ตารางขนาดใหญ่ ~ 500 ล้านแถวโดยไม่มีคีย์หลักระหว่าง SQL Server และ MySQL ตารางมีดัชนีที่ไม่ซ้ำแบบรวมที่ไม่ซ้ำกันเท่านั้น ฉันมีการเชื่อมต่อ ODBC ระหว่างเซิร์ฟเวอร์ แต่การนำเข้าประมาณ 8 ล้านแถวใช้เวลาประมาณ 45 นาทีดังนั้นฉันเชื่อว่าการนำเข้าที่ใหญ่กว่านั้นจะไม่มีเหตุผลเนื่องจากการหยุดชะงักอาจเกิดขึ้นได้ทุกเมื่อ ฉันไม่สามารถเปลี่ยนโครงสร้างตารางที่มีอยู่ฉันสามารถเพิ่มตารางอื่น ๆ ได้ หลังจากอ่านเพิ่มเติม offset / fetch ไม่ใช่ตัวเลือกสำหรับตารางขนาดใหญ่ "เลือก ... โดยที่ x ระหว่าง ... และ ... " ไม่ใช่ตัวเลือกเนื่องจากฉันไม่มีคีย์ที่ไม่ซ้ำ ฉันจะส่งออกตารางเป็นชุดที่รับประกันว่าจะมีแถวทั้งหมดได้อย่างไร ปัญหาของฉันคือเนื่องจากคีย์คลัสเตอร์ไม่ซ้ำกันการเรียงลำดับหลังจากนั้นจะไม่รับประกันว่าแถวฟิสิคัลมีลำดับเดียวกันระหว่างคิวรีแบบต่อเนื่องและการเรียงลำดับหลังจากคอลัมน์ทั้งหมดจะใช้เวลานานเกินไป และคุณจะแนะนำให้โยกย้ายแบตช์ผ่านไฟล์ ODBC หรือ CSV ได้อย่างไร

1
บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL ที่เริ่มการสิ้นสุดด้วยตนเอง
สำหรับเดือนที่ผ่านมาหนึ่งในเซิร์ฟเวอร์ของฉันกำลังประสบปัญหากับตัวแทนของเซิร์ฟเวอร์ SQL มันหยุดอัตโนมัติโดยมีข้อผิดพลาดด้านล่างซึ่งเกิดขึ้นแบบสุ่ม: ไฟล์เอาต์พุตเอเจนต์ Sql [097] ตรวจพบการรั่วไหลของหน่วยความจำ [204 ไบต์] ข้อยกเว้น 5 ตรวจพบที่บรรทัด 403 ของไฟล์ e: \ sql9_sp2_t \ sql \ komodo \ src \ core \ sqlagent \ src \ alerter.cpp SQLServerAgent เริ่มต้นการยกเลิกด้วยตนเอง ฉัน googled ข้อผิดพลาดนี้ แต่ไม่ได้รับข้อมูลมากนัก ทั้ง SQL Server และ Agent ทำงานด้วยบัญชีโดเมนเดียวกัน อย่างไรก็ตามปัญหานี้เกิดขึ้นกับบริการตัวแทนการเซิร์ฟเวอร์ SQL เท่านั้น ฉันยังไม่สามารถดูบริการ บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL …

2
คลังข้อมูล: ฉันจะค้นหาภาพรวมรายวันได้อย่างไร
ฉันมีสแนปชอตของฐานข้อมูลที่ไม่ใช่ชุดเวลา ตัวอย่างเช่น: ภาพรวมวันที่ 1: +----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+ Snapshot day 2 (มีการโพสต์ใหม่ในวันนี้): +----+----------------+------------+------------+ | ID | Title | Category | Date | +----+----------------+------------+------------+ | 1 | My first post | helloworld …

3
จะทำอย่างไรเมื่อคลัสเตอร์ Always On ของคุณสูญเสียโควรัม?
ฉันกำลังตรวจสอบขั้นตอนการ DR บริษัท ของเราและเมื่อฉันดูออนไลน์เพื่อหาวิธีการแก้ปัญหาในกลุ่ม Always On Cluster ที่เสียโควรัมให้เปรียบเทียบ ฉันเป็นสามหน้าไปสู่ผลลัพธ์ของ Google ก่อนที่จะค้นหาโพสต์ SE แรกในเรื่องการทำสำเนากลุ่มกับการจำลองแบบของทรานแซคชันกับกลุ่มความพร้อมใช้งานซึ่งสัมผัสเพียงเบา ๆ ในเรื่องขององค์ประชุมที่หายไป ในขณะที่ทุกคนเห็นด้วยกับโควรัมการสูญเสียที่ไม่ดีและมีคำแนะนำสำหรับการลดศักยภาพ แต่ก็ยังสามารถเกิดขึ้นได้ ฉันกำลังมองหาคำตอบที่ดีที่ได้รับการตรวจสอบไปยังเส้นทางที่ดีที่สุดในการกู้คืนจากการสูญเสียโควรัม Always On ของกลุ่ม

2
ซีพียู Schedulers ออฟไลน์
ฉันลงชื่อเข้าใช้ระบบไคลเอนต์ใหม่และรัน sp_blitz เพื่อดูว่ามีอะไรสั่นไหว รายงานกลับมาว่า " CPU Schedulers Offline " ซึ่งเป็นตัวใหม่สำหรับฉัน คอร์ CPU บางตัวไม่สามารถเข้าถึง SQL Server ได้เนื่องจากปัญหาการปิดบังหรือความเกี่ยวข้องของสิทธิ์ใช้งาน ยุติธรรมพอฉันเรียกใช้แบบสอบถามพื้นฐาน SELECT DOS.is_online , DOS.status , DOS.* FROM sys.dm_os_schedulers AS DOS ORDER BY 1; รายงานกลับมาว่าฉันมี 8 ชุดให้มองเห็นแบบออฟไลน์ 43 เป็นออนไลน์ ตามความรู้ของฉันไม่มีใครที่ลูกค้ารายนี้จะตั้งค่าความสัมพันธ์ของ CPU ใด ๆ โดยเจตนา ฉันตัดสินใจที่จะดูว่าฉันสามารถถอดได้หรือไม่ เมื่อฉันดูที่หน้าต่างคุณสมบัติฉันเห็นโปรเซสเซอร์ 40 ตัวและไม่มีตัวใดที่ตั้งค่าให้มีความสัมพันธ์กัน ทำไมมี 40 รายการ 43 รายการใน dm_os_schedulers …

2
รายการข้อผิดพลาดการยกเลิกแบทช์ในเซิร์ฟเวอร์ SQL
ใน SQL Server ถ้า XACT_ABORT ปิดอยู่ข้อผิดพลาดบางอย่างจะยุติคำสั่งปัจจุบัน (ตัวอย่างเช่นการจัดหาจำนวนพารามิเตอร์ที่ไม่ถูกต้องให้กับกระบวนงานที่เก็บไว้ซึ่งใช้พารามิเตอร์บางตัว) และข้อผิดพลาดบางอย่างจะยกเลิกชุดทั้งหมด (ตัวอย่างเช่น ขั้นตอนที่ไม่ใช้พารามิเตอร์) [อ้างอิง]: http://www.sommarskog.se/error-handling-I.html#scope-abortion สิ่งที่ฉันอยากรู้คือว่ามีรายการที่ชัดเจนของข้อผิดพลาดที่มีการยกเลิกชุดและคนที่มีคำสั่งยกเลิก

1
สั่งซื้อโดยการเปรียบเทียบตัวอักษรและตัวเลขผสมกัน
เราจำเป็นต้องทำการรายงานบางอย่างเกี่ยวกับค่าที่มักจะรวมสตริงของตัวเลขและตัวอักษรที่ต้องเรียงลำดับ 'ตามธรรมชาติ' สิ่งที่ต้องการเช่น "P7B18" หรือ "P12B3" @ สายอักขระส่วนใหญ่จะเป็นลำดับของตัวอักษรจากนั้นจึงสลับตัวเลข จำนวนของกลุ่มเหล่านี้และความยาวของแต่ละกลุ่มอาจแตกต่างกันไป เราต้องการเรียงลำดับตัวเลขเหล่านี้ตามลำดับตัวเลข เห็นได้ชัดว่าถ้าฉันจัดการค่าสตริงเหล่านั้นโดยตรงด้วยORDER BY"P12B3" จะมาก่อน "P7B18" เนื่องจาก "P1" เก่ากว่า "P7" แต่ฉันต้องการย้อนกลับเพราะ "P7" อยู่ก่อน "P12" ฉันยังต้องการที่จะทำการเปรียบเทียบช่วงเช่น@bin < 'P13S6'หรือบางอย่างเช่น ฉันไม่ต้องจัดการกับจำนวนจุดลอยตัวหรือจำนวนลบ; สิ่งเหล่านี้จะเป็นจำนวนเต็มที่ไม่ติดลบที่เรากำลังทำอยู่ ความยาวสตริงและจำนวนของเซกเมนต์อาจเป็นไปได้เองโดยไม่ จำกัด ขอบเขต ในกรณีของเราปลอกสตริงนั้นไม่สำคัญแม้ว่าจะมีวิธีการในการเปรียบเทียบการเรียงตัว แต่คนอื่น ๆ อาจพบว่ามีประโยชน์ ส่วนที่น่าเกลียดที่สุดของทั้งหมดนี้คือฉันต้องการที่จะทำทั้งการสั่งซื้อและการกรองช่วงในWHEREข้อ ถ้าฉันทำสิ่งนี้ใน C # มันจะเป็นงานที่ค่อนข้างง่าย: ทำการแยกวิเคราะห์เพื่อแยกอัลฟาจากตัวเลขใช้ IComparable และคุณก็ทำได้โดยทั่วไป แน่นอนว่า SQL Server ไม่ได้เสนอฟังก์ชั่นที่คล้ายกันอย่างน้อยที่สุดเท่าที่ฉันทราบ ใครรู้เทคนิคที่ดีในการทำงานนี้หรือไม่? มีความสามารถเล็กน้อยเผยแพร่ในการสร้างประเภท CLR ที่กำหนดเองที่ใช้ …

2
ฟังกลุ่มความพร้อมใช้งาน
ฉันกำลังดูกลุ่มความพร้อมใช้งาน AlwaysOn ยิ่งฉันมองมันมากเท่าไหร่ก็ยิ่งปรากฏว่ากลุ่มฟังความพร้อมใช้งานเป็นจุดล้มเหลวเพียงจุดเดียว ผู้ฟังทำงานตรงไหนจริงๆ? เซิร์ฟเวอร์แยกต่างหากเซิร์ฟเวอร์ SQL หลักพวกเขาทั้งหมดหรือไม่ สมมติว่าฉันมีแอปพลิเคชันทั้งหมดที่ศูนย์ข้อมูลที่สองของฉัน ฉันจะกำหนดค่าผู้ฟังได้อย่างไรว่าพวกเขาจะทำงานที่ไซต์ทั้งสองและแอปพลิเคชันจะชี้ไปที่สำเนาในเครื่องของตนเอง ฉันแน่ใจว่าฉันพลาดอะไรบางอย่างที่นี่ แต่ไม่รู้อะไรเลย

2
Postgres ด้วยสถาปัตยกรรม pgpool
ด้านล่างนี้เป็นตัวอย่างสถาปัตยกรรม pgpool: นี่หมายความว่าคุณจะต้องมี pgpool บนเซิร์ฟเวอร์เดียว จริงหรือ เมื่อฉันมองไปที่การตั้งค่าที่ผมยังเห็นว่าคุณกำหนดค่าแบ็กเอนด์ภายในpgpool.conf; ดังนั้นมันจึงมีความหมายเพิ่มเติม แต่มันไม่ได้อธิบายว่าทำไมฉันจึงเห็น pgpool บนเซิร์ฟเวอร์ส่วนหลังด้วย เมื่อดูเอกสารฉันเห็นด้วย: หากคุณใช้ PostgreSQL 8.0 หรือใหม่กว่าแนะนำให้ติดตั้งฟังก์ชั่น pgpool_regclass ใน PostgreSQL ทั้งหมดเพื่อให้เข้าถึงได้โดย pgpool-II ขอแนะนำอย่างยิ่งเนื่องจากจะใช้ภายในโดย pgpool-II ดังนั้นฉันไม่แน่ใจว่าจะคิดอย่างไร หากเป็นวิธีที่ดีที่สุดที่จะมี pgpool ในแบ็กเอนด์ทั้งหมดหรือเพียงเซิร์ฟเวอร์เฉพาะ?

5
การสแกนแม้ว่าฉันคาดหวังการค้นหา
ฉันต้องการเพิ่มประสิทธิภาพของSELECTคำสั่ง แต่ SQL Server จะทำการสแกนดัชนีแทนการค้นหา นี่คือแบบสอบถามที่แน่นอนอยู่ในขั้นตอนการจัดเก็บ: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL …

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