Time of Update: 2018-12-03
轉自微軟支援人員論壇:“我的SQL Server buffer pool很大,有辦法知道是哪些對象吃掉我的buffer Pool記憶體嗎?比方說,能否知道是哪個資料庫,哪個表,哪個index佔用了buffer Pool嗎?”針對這個問題可以使用(DMV) sys.dm_os_buffer_descriptors。這個DMV非常強大。根據SQL Server 聯機叢書,這個視圖的作用是 “返回有關 SQL Server
Time of Update: 2018-12-03
最近想分析一些訪問日誌,並每天週期性發送至一些人的郵箱中。Linux系統下有非常多的開源軟體可以採用命令的方式來發送郵件,有些較為複雜。其中一種即採用mutt和msmtp的解決方案,它類似於foxmail及outlook的用戶端,可以通過命令列的方式來進行郵件的自動發送。1、 msmtp的安裝與配置安裝過程如下:$ wget http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2$ tar xvf msmtp-1
Time of Update: 2018-12-03
剛用SQLServer的時候遇到一個情況,由於使用者的誤操作導致一張表被刪除,由於資料庫沒有備份,所有不能用Restore還原(現在知道備份是多麼的重要)。去網上查看了第三方的資料恢複工具然後找到了LumigentLog
Time of Update: 2018-12-03
運行DBCC CHECKDB withNO_INFOMSGS發現下面的錯誤: Table error: ObjectID 7, index ID 2, partition ID 562949953880064, alloc unit ID 562949953880064(type In-row data), page (1:54). Test ((m_type >= DATA_PAGE &&m_type <= UNDOFILE_HEADER_PAGE) ||
Time of Update: 2018-12-03
曾經看到很多人喜歡將測試資料庫和正式資料庫放到一台伺服器上,認為這樣可以節省資源。雖然正式和測試分成兩個執行個體配置,安全性上不會有問題,但是效能和維護上會有很多問題。 1. 維護:一般來說測試伺服器不需要什麼高可用性,測試需要停機就可以停機,不需要跟使用者去做溝通。但是對於正式伺服器都是有業務在跑的,而且有SLA的限制,不能說停就停。所以放到一起,測試伺服器就失去了靈活性。 2.效能:對於SQL
Time of Update: 2018-12-03
SELECT ps.nameAS PSName, dds.destination_idAS PartitionNumber, fg.name AS FileGroupName,fg.name, t.name, f.name as filename FROM (((sys.tablesAS t INNER JOINsys.indexesAS i ON (t.object_id= i.object_id))
Time of Update: 2018-12-03
在論壇看到這樣一個文章,針對這個問題很多人都有不同的看法。比如既然你已經給予了DBA Sysadmin的許可權,那麼你就要去相信他,否則重新找一個DBA。這話是沒錯,作為公司的DBA是管理公司的核心資料的,我們一定要相信他。 但是從業務的角度來看,因為有很多機密的資訊,DBA是不能夠接觸的,但是如何保證他們沒有看過這些資料呢? 解決此類的問題我覺得需要: 1. 使用加密,這樣DBA即使有許可權看到表也無法看到裡邊的資料,但是會有效能損失。 2.對DBA的賬戶進行Audit(server
Time of Update: 2018-12-03
通常很多人覺得DBCC CHECKDB WITH REPAIR_ALLOW_DATA_LOSS可以修複資料庫出現的問題,但是不一定。Pual的文章很詳細的介紹了哪些情況下是無法修複的: In my previous post on interpreting CHECKDB output, plus in my DBCC Internals session at TechEd IT Forum yesterday, I mentioned there are some things that
Time of Update: 2018-12-03
今天刪除SQLServer維護計劃的時候出現下面的錯誤: The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id". The conflict occurred in database "msdb", table "dbo.sysmaintplan_subplans". (Microsft SQL Server, Error:547) 解決辦法: Use MSDBgodelete
Time of Update: 2018-12-03
在執行計畫中我們經常會看到KeyLookup和RIDLookup操作,而且Cost很大,具體什麼是Key Lookup和RID Lookup: RIDLookup是在使用提供的行標識符(RID) 在堆上進行的書籤尋找 KeyLookup運算子是在具有叢集索引的表上進行的書籤尋找 區別是 Key Lookup通過叢集索引索引值進行尋找,RID
Time of Update: 2018-12-03
使用SQL Server Log On trigger: CREATE DATABASE AuditDb GO USE AuditDb GO /* Create AuditTable */ CREATE TABLE ServerLogonHistory (SystemUser VARCHAR(512), DBUser VARCHAR(512), SPID INT, LogonTime DATETIME) GO /* Create LogonTrigger */ CREATE TRIGGER
Time of Update: 2018-12-03
先來看兩個例子: 1. 建立測試表,C1為主鍵。 CREATE TABLE [dbo].[ProdTable2]( [c1] [int] IDENTITY(1,1)NOTNULL, [c2] [datetime] NULL, [c3] [char](25)NULL, CONSTRAINT[PK_ProdTable2] PRIMARY KEY CLUSTERED( [c1]
Time of Update: 2018-12-03
引:在《《OpenVPN效能》之後,我進一步閱讀了硬體的解決方案,希望能得到一些思想,然後進一步的改進我的設計,由於工作的便利性和實際工作的需要,我閱讀了intel的82571EB,82574L,82575等乙太網路晶片的datesheet的相關特性描述部分(由於我不打算親自寫驅動,因此我沒有閱讀寄存器以及儲存空間細節,更多的是我不相信自己的驅動比intel的工程師們的更高效),得到了很多感覺,以下是我的一些摘錄和讀後感。一,網路應用開銷1.協議棧處理開銷:分層模型各個層次的OS實現開銷2.記憶
Time of Update: 2018-12-03
當使用者告訴你資料庫很慢的時候,你要怎麼開始Narrowdown問題呢?SQL Server提供了sys.dm_os_wait_stats可以協助我們查看CPU,記憶體或者IO的等待狀況。SQL Server執行過程中中等待資訊會被記錄到這個View中。 通過下面的語句我們可以抓取一段時間內SQL Server等待的累積資訊,通過對這些資訊進行排序可以找出資源瓶頸。 先看一下各個Wait等待的佔比: WITH Waits AS ( SELECT wait_type,
Time of Update: 2018-12-03
SELECT SPID=p.spid, DBName = convert(CHAR(20),d.name), ProgramName = program_name, LoginName = convert(CHAR(20),l.name), HostName = convert(CHAR(20),hostname), Status = p.status, BlockedBy = p.blocked,
Time of Update: 2018-12-03
今天在MSDN查詢最佳化建議中看到這樣一條資訊:SQL Server 會自動考慮索引交集並可以在同一查詢中對同一個表使用多個索引(可能跟大家的理解有偏差)。 在解釋之前我們先看一個例子: useAdventureWorksgoselect soh.*from sales.SalesOrderHeaderASsohWHERE soh.SalesPersonID= 276and soh.OrderDatebetween'4/1/2002'and'7/1/2002' 查看執行計畫:
Time of Update: 2018-12-03
SQL Server在刪除變長列或者減小變長列的長度後,表的大小不會響應自動減小,除非DBA重建索引或者reorganized索引。變長列包括varchar,nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext,image, sql_variant,和xml。 SQL Server提供了一個DBCCCLEANTABLE的命令可以回收表或索引檢視表中已刪除的可變長度列的空間。 下面我們做個測試:
Time of Update: 2018-12-03
以前看Pual寫過很多資料恢複的文章,他很多的測試都是自己建立的Corrupt資料庫,其實我們自己也可以。 1. 建立資料庫資料表插入資料:use master gocreate databasecorrupt use corrupt gocreate tabletest(IDint, namevarchar(10)) declare @int asintset @int = 1while @int <20begininsert
Time of Update: 2018-12-03
由於SQL Server不同版本之間會有一些不同的功能,比如在SQL Server 2008 企業版中可以使用資料壓縮,但是在標準版中卻不支援這個功能。我們不能將包含這些功能的資料庫遷移到不支援這些功能的 SQL Server 版本。 下面我嘗試將使用資料壓縮的資料庫還原到標準版會出現錯誤: 所以如果要還原到其他版本的資料庫,我們需要知道當前資料庫是不是啟用了特殊功能。使用 sys.dm_db_persisted_sku_features
Time of Update: 2018-12-03
上文我們已經建立了Corrupt的資料庫,今天我們就用分頁還原修複損壞的頁面。 首先我們允許DBCC CHECKDB查看損壞的頁面ID: DBCC CHECKDB withNO_INFOMSGS Msg 8928, Level 16,State 1, Line 1Object ID2105058535, index ID 0, partition ID 72057594038779904, alloc unit ID72057594039828480 (type In-row data):