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

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

2
ทางเลือกอื่นในการบีบอัด NVARCHAR (MAX)?
ฉันกำลังพยายามบีบอัดตารางที่มีNVARCHAR(MAX)เขตข้อมูล น่าเสียดายที่rowการpageบีบอัดข้อมูลไม่มีผลกระทบต่อความปรารถนา (บันทึกเพียง ~ 100/200 MB สำหรับตาราง 20 GB) นอกจากนี้ฉันไม่สามารถใช้การบีบอัดที่เก็บคอลัมน์และที่เก็บคอลัมน์ได้เนื่องจากพวกเขาไม่สนับสนุนการบีบอัดNVARCHAR(MAX)ฟิลด์ มีใครบอกได้ไหมว่าฉันมีทางเลือกอื่น ๆ ที่นี่? ฉันเดาด้วยrowและการpageบีบอัดไม่มีผลเพราะเนื้อหาของNVARCHAR(MAX)คอลัมน์นั้นไม่เหมือนใคร

3
การสร้างเซิร์ฟเวอร์ที่เชื่อมโยงที่ชี้ไปที่ตัวเอง
ฉันพยายามสร้างเซิร์ฟเวอร์ที่เชื่อมโยงกับอินสแตนซ์ SQL Server 2014 servername\instancenameโดยใช้การเรียกต่อไปนี้: EXEC master.dbo.sp_addlinkedserver @server = N'servername\instancename', @srvproduct=N'SQL Server' ฉันได้รับข้อผิดพลาด: Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82 The server 'servername\instancename' already exists. นี้ทำงานได้ดีใน SQL Server 2005 และเป็นไปตามMSDN , เซิร์ฟเวอร์ที่เชื่อมโยงไม่จำเป็นต้องเป็นอินสแตนซ์อื่นของ SQL Server ดังนั้นฉันไม่แน่ใจว่ามีอะไรเปลี่ยนแปลงในเวอร์ชันล่าสุดที่ไม่อนุญาตสิ่งนี้ การใช้ UI สร้างข้อความที่คล้ายกัน: คุณไม่สามารถสร้างเซิร์ฟเวอร์ SQL ภายในเครื่องเป็นเซิร์ฟเวอร์ที่มีการเชื่อมโยง ฉันเข้าใจว่ามันเป็นเรื่องแปลกที่จะขอ แต่มันก็เพื่อสนับสนุนรหัสดั้งเดิมที่ทำงานในปี 2005 (และเคยเป็นกรณีที่แยกต่างหาก) เอกสารระบุว่าควรใช้งานได้ แต่ไม่สามารถทำได้ …

2
ตรรกะเบื้องหลัง ISNUMERIC สำหรับอักขระพิเศษบางตัวคืออะไร
ISNUMERICฟังก์ชั่นที่มีพฤติกรรมที่ไม่คาดคิด เอกสาร MSDN พูดว่า: ISNUMERICส่งคืน 1 เมื่อนิพจน์อินพุตประเมินเป็นชนิดข้อมูลตัวเลขที่ถูกต้อง มิฉะนั้นก็จะส่งกลับ 0. ที่ถูกต้องชนิดข้อมูลที่เป็นตัวเลขรวมต่อไปนี้: int, bigint, smallint, TINYINT, ทศนิยม, ตัวเลข, เงิน, smallmoney ลอยจริง และยังมีเชิงอรรถ: ISNUMERICส่งคืน 1 สำหรับอักขระบางตัวที่ไม่ใช่ตัวเลขเช่นเครื่องหมายบวก (+), ลบ (-) และสัญลักษณ์สกุลเงินที่ถูกต้องเช่นเครื่องหมายดอลลาร์ ($) สำหรับรายการที่สมบูรณ์ของสัญลักษณ์สกุลเงินดูเงินและ smallmoney (Transact SQL) เอาล่ะเพื่อให้+, -และสัญลักษณ์สกุลเงินจดทะเบียนที่คาดว่าจะได้รับการพิจารณาเป็นตัวเลข จนถึงตอนนี้ดีมาก ตอนนี้สำหรับส่วนที่แปลก ก่อนอื่นสัญลักษณ์สกุลเงินบางส่วนจากบทความที่เชื่อมโยงไม่ใช่ตัวเลขรวมไปถึง: เครื่องหมายยูโร - สกุลเงิน hex 20A0: ₠ สัญญาณ Naira, hex 20A6: ₦ Rial sign, …

2
ความแตกต่างระหว่างบันทึกธุรกรรมและบันทึกการทำซ้ำใน MySQL
ฉันได้อ่านเกี่ยวกับ MySQL ในความคิดของฉันฉันเห็นสองประเภทบันทึกที่คล้ายกันมาก MySQL บันทึกวิธีและเวลาที่ข้อมูลถูกเปลี่ยนแปลงในบันทึก ข้อมูลที่ใช้สำหรับการกู้คืน MySQL ฉันสับสนกับฟังก์ชั่นการบันทึกสองประเภท

2
วิธีการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามกลุ่มเดียว?
ฉันมีปัญหาgroup byฉันต้องการเลือกหลายคอลัมน์ แต่จัดกลุ่มตามคอลัมน์เดียว แบบสอบถามด้านล่างเป็นสิ่งที่ฉันพยายาม แต่มันทำให้ฉันมีข้อผิดพลาด SELECT Rls.RoleName,Pro.[FirstName],Pro.[LastName],Count(UR.[RoleId]) as [Count] from [b.website-sitecore-core].[dbo].[aspnet_UsersInRoles] UR inner join [b.website-professional-au].[dbo].[Profile] Pro on UR.UserId = Pro.Id inner join [b.website-sitecore-core].[dbo].[aspnet_Roles] Rls on Rls.RoleId = UR.RoleId inner join [b.website-professional-au].[dbo].[Gender] Gn on gn.Id = pro.GenderId GROUP BY Rls.RoleName;

1
เหตุใดคุณจึงต้องใช้บัญชีบริการที่มีการจัดการแทนที่จะเป็นบัญชีเสมือนใน SQL Server 2012
ใน SQL Server 2012 บัญชีบริการจะถูกสร้างเป็นบัญชีเสมือน (VAs) ตามที่อธิบายไว้ที่นี่ตรงข้ามกับบัญชีบริการที่ได้รับการจัดการ (MSAs) ความแตกต่างที่สำคัญที่ฉันสามารถเห็นได้จากสิ่งเหล่านี้ตามคำอธิบาย: MSAs เป็นบัญชีโดเมน VAs เป็นบัญชีท้องถิ่น MSAs ใช้การจัดการรหัสผ่านอัตโนมัติที่จัดการโดย AD, VAs ไม่มีรหัสผ่าน ในบริบท Kerberos, MSAs ลงทะเบียน SPNs โดยอัตโนมัติ VAs ไม่ มีความแตกต่างอื่น ๆ อีกไหม? ถ้า Kerberos ไม่ได้ใช้งานทำไม DBA ถึงต้องการ MSA อัปเดต : ผู้ใช้รายอื่นได้ระบุถึงความขัดแย้งที่เป็นไปได้ในเอกสาร MS ที่เกี่ยวข้องกับ VAs : บัญชีเสมือนมีการจัดการโดยอัตโนมัติและบัญชีเสมือนสามารถเข้าถึงเครือข่ายในสภาพแวดล้อมของโดเมน กับ บัญชีเสมือนไม่สามารถรับรองความถูกต้องไปยังสถานที่ห่างไกล บัญชีเสมือนทั้งหมดใช้สิทธิ์ของบัญชีเครื่อง <domain_name>\<computer_name>$บทบัญญัติบัญชีเครื่องในรูปแบบ "บัญชีเครื่องจักร" คืออะไร? วิธีการ …

1
การเข้าร่วมช่วงใหม่ค้นหาดัชนีคอมโพสิตที่ไม่สามารถใช้ได้
สำหรับสคีมาและข้อมูลตัวอย่างต่อไปนี้ CREATE TABLE T ( A INT NULL, B INT NOT NULL IDENTITY, C CHAR(8000) NULL, UNIQUE CLUSTERED (A, B) ) INSERT INTO T (A) SELECT NULLIF(( ( ROW_NUMBER() OVER (ORDER BY @@SPID) - 1 ) / 1003 ), 0) FROM master..spt_values แอปพลิเคชันกำลังประมวลผลแถวจากตารางนี้ในลำดับดัชนีแบบกลุ่มเป็นกลุ่ม 1,000 แถว 1,000 แถวแรกจะถูกดึงออกมาจากแบบสอบถามต่อไปนี้ SELECT TOP 1000 …
14 sql-server  index 

2
การลบและเรียกคืนพื้นที่จากตาราง InnoDB
ฉันมีตาราง InnoDB 700GB ซึ่งฉันไม่ได้เขียนข้อมูลใด ๆ เพิ่มเติมไปยัง (อ่านเท่านั้น) ฉันต้องการลบข้อมูลเก่าที่เก็บไว้และเรียกคืนพื้นที่ดิสก์นั้น (ขณะที่ฉันหมดข้อมูล) ส่วนลบนั้นค่อนข้างง่ายเพราะฉันมีดัชนีหลักอัตโนมัติเพื่อให้ฉันสามารถวนซ้ำโดยใช้มันและลบแถว แต่นั่นจะไม่ทำให้ฉันกลับมามีพื้นที่อีก ฉันคิดว่าOPTIMIZE TABLEจะใช้ แต่อาจใช้เวลาตลอดไปบนโต๊ะ 700GB ดังนั้นมีตัวเลือกอื่นที่ฉันสามารถมองเห็นได้หรือไม่ แก้ไขโดย RolandoMySQLDBA สมมติว่าตารางของคุณคือmydb.mytableกรุณาเรียกใช้แบบสอบถามต่อไปนี้และโพสต์ที่นี่เพื่อให้คุณสามารถกำหนดพื้นที่ที่จำเป็นสำหรับการหดตัวของตาราง: SELECT FORMAT(dat/POWER(1024,3),2) datsize, FORMAT(ndx/POWER(1024,3),2) ndxsize, FORMAT((dat+ndx)/POWER(1024,3),2) tblsize FROM (SELECT data_length dat,index_length ndx FROM information_schema.tables WHERE table_schema='mydb' AND table_name='mytable') A; เราต้องดูโครงสร้างของตารางด้วยหากได้รับอนุญาต แก้ไขโดย Noam นี่คือผลลัพธ์ของแบบสอบถาม: datsize ndxsize tblsize 682.51 47.57 730.08 นี่คือโครงสร้างของตาราง ( …
14 mysql  innodb 

1
เมื่อเปลี่ยนขนาดของคอลัมน์ nvarchar ฉันจำเป็นต้องทำดัชนีที่ไม่ซ้ำหรือไม่? และตารางจะถูกล็อคเมื่อสร้างดัชนีใหม่หรือไม่
ในฐานข้อมูลของเรามีตารางขนาดใหญ่ที่มีลักษณะคล้ายกันมากขึ้นหรือน้อยลง: CREATE TABLE dbo.production_data ( pd_id BIGINT PRIMARY KEY, serial NVARCHAR(16) NOT NULL UNIQUE, ... ); แต่ตอนนี้ขนาดของเขตข้อมูลอนุกรมกลายเป็นต่ำดังนั้นฉันต้องการเปลี่ยนเป็น 32 schema Visual Studio เปรียบเทียบเครื่องมือแนะนำการทำเช่นนี้โดย: DROP INDEX ux_production_data_serial ON dbo.production_data; GO ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL; GO CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC); มันจำเป็นจริงๆหรือ? หรือมากกว่านั้นเป็นวิธีที่ประหยัดมากในการทำเช่นนี้? เมื่อสร้างดัชนีที่ไม่ซ้ำอีกครั้งตารางของฉันจะถูกล็อคหรือไม่ เพราะนี่จะเป็นปัญหาใหญ่ (เนื่องจากตารางมี 30 …

1
การคอมไพล์บล็อกมากเกินไปใน sp_procedure_params_90_rowset
การฟื้นตัวของคำถามนี้ใน MSDN: ถูกบล็อก - กระบวนการรายงาน: แหล่งข้อมูลนี้รออะไร "OBJECT: 32767: 124607697: 0 [คอมไพล์]" ฉันตรวจพบข้อความเหล่านี้ใน Profiler แล้ว พวกเขาทั้งหมดมีระยะเวลามากกว่า 3 วินาที มากกว่า 10 คนขึ้นไป กิจกรรมการปิดกั้นเป็นเช่นเดียวกับการเชื่อมโยงจากMSDN การโทรทั้งหมดใช้การตั้งชื่อ 3 ส่วน ทั้งหมดระบุ proc ที่แตกต่างกันในรูปแบบที่มีลักษณะดังต่อไปนี้: exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, …

1
ไม่ควรหลีกเลี่ยงใน
ในบรรดานักพัฒนา SQL Server บางคนเป็นความเชื่อที่ถือกันอย่างกว้างขวางว่าNOT INช้ามากและควรเขียนคำสั่งใหม่เพื่อให้ผลลัพธ์เหมือนเดิม แต่ไม่ใช้คำหลัก "ความชั่วร้าย" ( ตัวอย่าง ) มีความจริงใด ๆ หรือไม่? ตัวอย่างเช่นมีข้อบกพร่องบางอย่างที่รู้จักใน SQL Server (เวอร์ชันใด) ที่ทำให้การสืบค้นที่ใช้NOT INมีแผนการดำเนินการที่เลวร้ายยิ่งกว่าแบบสอบถามที่เทียบเท่าที่ใช้ LEFT JOINรวมกับNULLการตรวจสอบหรือ (SELECT COUNT(*) ...) = 0ในWHEREข้อ?

1
ส่วนคำสั่ง 'return' สามารถส่งคืนคอลัมน์ต้นทางที่ไม่ได้แทรกได้หรือไม่?
นี่คือตัวอย่างเล็กน้อยของปัญหาจริงของฉัน: create table t(id serial primary key, rnd double precision); แน่นอนคุณสามารถส่งคืนคอลัมน์ที่แทรกด้วยreturningประโยค: with w as (insert into t(rnd) values(random()) returning *) insert into t(rnd) select random() from w returning *; /* | ID | RND | |----|----------------| | 9 | 0.203221440315 | */ คุณสามารถคืนค่าตัวอักษร: with w as (insert into t(rnd) values(random()) …

4
ฉันจะกำหนดจำนวน IOP ที่ฉันต้องการสำหรับฐานข้อมูล AWS RDS ของฉันได้อย่างไร
ฉันกำลังย้ายส่วนหนึ่งของฐานข้อมูล mysql ไปยัง AWS ข้อมูลที่เป็นปัญหาคือการเขียน 99% และแต่ละแถวมีเขตข้อมูล varchar ประมาณ 1k, datetime และ 4 ints ฉันคาดว่าเราจะต้องแทรกระหว่าง 20-25k บันทึก / ชั่วโมงในช่วงเวลาเร่งด่วน ฉันใช้ iostat -h ในฐานข้อมูลปัจจุบันและรายงานประมาณ 40 tps ฉันจะหาประเภทของ IOPS ที่ฉันต้องการได้อย่างไร
14 mysql  amazon-rds 

2
ทำไม MySQL อนุญาตให้มีการใช้นามแฝง SELECT?
ใน SQL เท่าที่ฉันรู้ลำดับการประมวลผลแบบสอบถามตรรกะซึ่งเป็นลำดับการตีความแนวคิดเริ่มต้นด้วย FROM ด้วยวิธีดังต่อไปนี้: จาก WHERE จัดกลุ่มตาม การมี เลือก สั่งโดย การติดตามรายการนี้เป็นเรื่องง่ายที่จะดูว่าทำไมคุณไม่สามารถเลือกชื่อแทนในส่วนคำสั่ง WHERE เนื่องจากยังไม่ได้สร้างชื่อแทน T-SQL (SQL Server) ทำตามสิ่งนี้อย่างเคร่งครัดและคุณไม่สามารถใช้นามแฝง SELECT ได้จนกว่าคุณจะผ่าน SELECT แต่ใน MySQL มันเป็นไปได้ที่จะใช้นามแฝง SELECT ในส่วนคำสั่ง HAVING แม้ว่ามันควรจะดำเนินการก่อน สิ่งนี้จะเป็นไปได้อย่างไร เพื่อให้ตัวอย่าง: SELECT YEAR(orderdate), COUNT(*) as Amount FROM Sales.Orders GROUP BY YEAR(orderdate) HAVING Amount>1; คำสั่งไม่ถูกต้องใน T-SQL (เนื่องจาก HAVING อ้างถึงนามแฝง SELECT Amount) ... …

2
DBCC CHECKDB ความเสียหายที่ไม่สามารถแก้ไขได้: มุมมองที่จัดทำดัชนีมีแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง
TL; DR: ฉันมีความเสียหายที่ไม่สามารถแก้ไขได้ในมุมมองที่จัดทำดัชนี นี่คือรายละเอียด: วิ่ง DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS บนหนึ่งในฐานข้อมูลของฉันสร้างข้อผิดพลาดต่อไปนี้: เกี่ยวกับข่าวสาร 8907 ระดับ 16 สถานะ 1 บรรทัด 1 ดัชนีเชิงพื้นที่ดัชนี XML หรือมุมมองที่จัดทำดัชนี 'ViewName' (ID วัตถุ 784109934) ประกอบด้วยแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้ ( ... ) CHECKDB พบข้อผิดพลาดในการจัดสรร 0 ข้อและข้อผิดพลาดความสอดคล้อง 1 ข้อในตาราง 'ViewName' repair_rebuild เป็นระดับการซ่อมแซมขั้นต่ำ (... ) ฉันเข้าใจว่าข้อความนี้บ่งชี้ว่าข้อมูลที่เป็นรูปธรรมของมุมมองที่จัดทำดัชนี 'ViewName' ไม่เหมือนกับสิ่งที่สร้างข้อความค้นหาต้นแบบ อย่างไรก็ตามการตรวจสอบข้อมูลด้วยตนเองไม่ได้ทำให้เกิดความคลาดเคลื่อน: SELECT * …

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