#DBA #SQL #Server #Performance #Tuning
2009-04-08
SQL Server 2008 SP1 Yayında
SQL Server 2008'in beklenen Service Pack 1'i nihayet yayında. SQL Server 2008 SP1'i microsoft'tan indirebilirsiniz(Build 10.00.2531.00).
2009-03-23
Kullanıcı Tablolarında Bulunan İndexlerin Filegrouplarını Bulma
Primary filegroup üzerinde bulunan indexleri aşağıdaki kod ile bulabiliriz:
SELECT o.[name], o.[type], i.[name], i.[index_id], f.[name]
FROM sys.indexes i (nolock) INNER JOIN sys.filegroups f (nolock) ON i.data_space_id = f.data_space_id
INNER JOIN sys.all_objects o (nolock) ON i.[object_id] = o.[object_id]
WHEREo.type<>'s' and o.type='U' and f.name='PRIMARY'
ORDER BY o.name, i.name
Bu kod özellikle nesnelerinizi filegroup'lar arasında taşırken; özellikle "Hangi indexleri taşımadım?" sorusuna cevap niteliğinde.
SELECT o.[name], o.[type], i.[name], i.[index_id], f.[name]
FROM sys.indexes i (nolock) INNER JOIN sys.filegroups f (nolock) ON i.data_space_id = f.data_space_id
INNER JOIN sys.all_objects o (nolock) ON i.[object_id] = o.[object_id]
WHEREo.type<>'s' and o.type='U' and f.name='PRIMARY'
ORDER BY o.name, i.name
Bu kod özellikle nesnelerinizi filegroup'lar arasında taşırken; özellikle "Hangi indexleri taşımadım?" sorusuna cevap niteliğinde.
2009-03-22
Bir Tabloya Ait İndekslerin İstatistiklerini Bulma
SELECT
object_name(sys.indexes.Object_id) AS Table_Name,
ISNULL(sys.indexes.name, '---') AS index_name,
partitions.Rows,
partitions.SizeMB,
sys.indexes.type_desc,
sys.indexes.is_unique,
sys.indexes.is_primary_key,
sys.indexes.is_unique_constraint,
sys.indexes.is_unique,
ISNULL(Index_Columns.index_columns_key, '---') AS index_columns_key,
ISNULL(Index_Columns.index_columns_include, '---') AS index_columns_include,
ISNULL(sys.dm_db_index_usage_stats.user_seeks,0) AS user_seeks,
ISNULL(sys.dm_db_index_usage_stats.system_seeks,0) AS system_seeks,
ISNULL(sys.dm_db_index_usage_stats.user_scans,0) AS user_scans,
ISNULL(sys.dm_db_index_usage_stats.system_scans,0) AS system_scans,
ISNULL(sys.dm_db_index_usage_stats.user_lookups,0) AS user_lookups,
ISNULL(sys.dm_db_index_usage_stats.system_lookups,0) AS system_lookups,
ISNULL(sys.dm_db_index_usage_stats.user_updates,0) AS user_updates,
ISNULL(sys.dm_db_index_usage_stats.system_updates,0) AS system_updates,
(
(
(CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.user_seeks,0))+CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.system_seeks,0)))*10
+ CASE WHEN sys.indexes.type=2 THEN (CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.user_scans,0))+CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.system_scans,0)))*1 ELSE 0 END
+ 1
)
/CASE WHEN sys.indexes.type=2 THEN (CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.user_updates,0))+CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.system_updates,0))+1) ELSE 1 END
) AS Score
FROM
sys.indexes
JOIN (
SELECT
object_id, index_id, SUM(row_count) AS Rows,
CONVERT(numeric(19,3), CONVERT(numeric(19,3), SUM(in_row_reserved_page_count+lob_reserved_page_count+row_overflow_reserved_page_count))/CONVERT(numeric(19,3), 128)) AS SizeMB
FROM sys.dm_db_partition_stats
GROUP BY object_id, index_id
) AS partitions ON sys.indexes.object_id=partitions.object_id AND sys.indexes.index_id=partitions.index_id
CROSS APPLY (
SELECT
LEFT(index_columns_key, LEN(index_columns_key)-1) AS index_columns_key,
LEFT(index_columns_include, LEN(index_columns_include)-1) AS index_columns_include
FROM
(
SELECT
(
SELECT sys.columns.name + ', '
FROM
sys.index_columns
JOIN sys.columns ON
sys.index_columns.column_id=sys.columns.column_id
AND sys.index_columns.object_id=sys.columns.object_id
WHERE
sys.index_columns.is_included_column=0
AND sys.indexes.object_id=sys.index_columns.object_id AND sys.indexes.index_id=sys.index_columns.index_id
ORDER BY key_ordinal
FOR XML PATH('')
) AS index_columns_key,
(
SELECT sys.columns.name + ', '
FROM
sys.index_columns
JOIN sys.columns ON
sys.index_columns.column_id=sys.columns.column_id
AND sys.index_columns.object_id=sys.columns.object_id
WHERE
sys.index_columns.is_included_column=1
AND sys.indexes.object_id=sys.index_columns.object_id AND sys.indexes.index_id=sys.index_columns.index_id
ORDER BY index_column_id
FOR XML PATH('')
) AS index_columns_include
) AS Index_Columns
) AS Index_Columns
LEFT OUTER JOIN sys.dm_db_index_usage_stats ON
sys.indexes.index_id=sys.dm_db_index_usage_stats.index_id AND sys.indexes.object_id=sys.dm_db_index_usage_stats.object_id
AND sys.dm_db_index_usage_stats.database_id=DB_ID()
WHERE
sys.indexes.object_id=object_id('TableName')
object_name(sys.indexes.Object_id) AS Table_Name,
ISNULL(sys.indexes.name, '---') AS index_name,
partitions.Rows,
partitions.SizeMB,
sys.indexes.type_desc,
sys.indexes.is_unique,
sys.indexes.is_primary_key,
sys.indexes.is_unique_constraint,
sys.indexes.is_unique,
ISNULL(Index_Columns.index_columns_key, '---') AS index_columns_key,
ISNULL(Index_Columns.index_columns_include, '---') AS index_columns_include,
ISNULL(sys.dm_db_index_usage_stats.user_seeks,0) AS user_seeks,
ISNULL(sys.dm_db_index_usage_stats.system_seeks,0) AS system_seeks,
ISNULL(sys.dm_db_index_usage_stats.user_scans,0) AS user_scans,
ISNULL(sys.dm_db_index_usage_stats.system_scans,0) AS system_scans,
ISNULL(sys.dm_db_index_usage_stats.user_lookups,0) AS user_lookups,
ISNULL(sys.dm_db_index_usage_stats.system_lookups,0) AS system_lookups,
ISNULL(sys.dm_db_index_usage_stats.user_updates,0) AS user_updates,
ISNULL(sys.dm_db_index_usage_stats.system_updates,0) AS system_updates,
(
(
(CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.user_seeks,0))+CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.system_seeks,0)))*10
+ CASE WHEN sys.indexes.type=2 THEN (CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.user_scans,0))+CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.system_scans,0)))*1 ELSE 0 END
+ 1
)
/CASE WHEN sys.indexes.type=2 THEN (CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.user_updates,0))+CONVERT(Numeric(19,6), ISNULL(sys.dm_db_index_usage_stats.system_updates,0))+1) ELSE 1 END
) AS Score
FROM
sys.indexes
JOIN (
SELECT
object_id, index_id, SUM(row_count) AS Rows,
CONVERT(numeric(19,3), CONVERT(numeric(19,3), SUM(in_row_reserved_page_count+lob_reserved_page_count+row_overflow_reserved_page_count))/CONVERT(numeric(19,3), 128)) AS SizeMB
FROM sys.dm_db_partition_stats
GROUP BY object_id, index_id
) AS partitions ON sys.indexes.object_id=partitions.object_id AND sys.indexes.index_id=partitions.index_id
CROSS APPLY (
SELECT
LEFT(index_columns_key, LEN(index_columns_key)-1) AS index_columns_key,
LEFT(index_columns_include, LEN(index_columns_include)-1) AS index_columns_include
FROM
(
SELECT
(
SELECT sys.columns.name + ', '
FROM
sys.index_columns
JOIN sys.columns ON
sys.index_columns.column_id=sys.columns.column_id
AND sys.index_columns.object_id=sys.columns.object_id
WHERE
sys.index_columns.is_included_column=0
AND sys.indexes.object_id=sys.index_columns.object_id AND sys.indexes.index_id=sys.index_columns.index_id
ORDER BY key_ordinal
FOR XML PATH('')
) AS index_columns_key,
(
SELECT sys.columns.name + ', '
FROM
sys.index_columns
JOIN sys.columns ON
sys.index_columns.column_id=sys.columns.column_id
AND sys.index_columns.object_id=sys.columns.object_id
WHERE
sys.index_columns.is_included_column=1
AND sys.indexes.object_id=sys.index_columns.object_id AND sys.indexes.index_id=sys.index_columns.index_id
ORDER BY index_column_id
FOR XML PATH('')
) AS index_columns_include
) AS Index_Columns
) AS Index_Columns
LEFT OUTER JOIN sys.dm_db_index_usage_stats ON
sys.indexes.index_id=sys.dm_db_index_usage_stats.index_id AND sys.indexes.object_id=sys.dm_db_index_usage_stats.object_id
AND sys.dm_db_index_usage_stats.database_id=DB_ID()
WHERE
sys.indexes.object_id=object_id('TableName')
2009-03-18
Bir Veritabanının Büyümesini İzleme
Bir veritabanının büyümesini hızlı olarak aşağıdaki kod ile alabilirsiniz:
select
backup_start_date BackupDate
, floor(backup_size/1024000000) SizeGB
from msdb..backupset
where database_name = db_name()
and type = 'd'
order by backup_start_date desc
select
backup_start_date BackupDate
, floor(backup_size/1024000000) SizeGB
from msdb..backupset
where database_name = db_name()
and type = 'd'
order by backup_start_date desc
2009-03-17
Askerlikten Damlalar
Siyaha boyanmış bir pencereden
Seyretmek zor dünyayı...
Hayatın henüz baharında
Solmaya başlamış gülü yeşertmek zor.
Ekip ruhundan yoksun insanlardan uzak dur!
Vakit doldu, yeni bir gün bitti; son budur...
Akdağ/Karaburun, İzmir
17.06.2002 16:53 (Mesai çıkışı)
Seyretmek zor dünyayı...
Hayatın henüz baharında
Solmaya başlamış gülü yeşertmek zor.
Ekip ruhundan yoksun insanlardan uzak dur!
Vakit doldu, yeni bir gün bitti; son budur...
Akdağ/Karaburun, İzmir
17.06.2002 16:53 (Mesai çıkışı)
2009-03-15
SQL Server 2008 Service Pack 1 - CTP
SQL Server 2008 Service Pack 1 - CTP yayınlandı. SP1'in Itanium, x64 ve x86 versiyonlarını aşağıdaki adresten indirebilirsiniz:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6f26fc45-f0ca-49cf-a6ee-840c7e8bb8af&displaylang=en
http://www.microsoft.com/downloads/details.aspx?FamilyID=6f26fc45-f0ca-49cf-a6ee-840c7e8bb8af&displaylang=en
2009-03-11
Extended Property Nasıl Eklenir?
Bir tablo yada tablonun bir field'ına extended property nasıl eklenir? sorusuyla sık sık karşılaştığım için ekleme ihtiyacı hissettim.
--Tablonun extended property'sini ekleme
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tablo Aciklamasi’, @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TabloAdi'
GO
--Field extended property'i ekleme
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'İlgili fieldin Aciklamasi’, @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TabloAdi', @level2type=N'COLUMN',@level2name=N'FieldAdi'
GO
--Tablonun extended property'sini ekleme
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Tablo Aciklamasi’, @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TabloAdi'
GO
--Field extended property'i ekleme
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'İlgili fieldin Aciklamasi’, @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TabloAdi', @level2type=N'COLUMN',@level2name=N'FieldAdi'
GO
2009-02-19
Veritabanındaki EXECUTE Yetkisinin Otomatik Oluşturulması
Değerli Okuyucular,
Geçenlerde iki farklı ortamda aynı veritabanının EXECUTE yetkilerinin aynı olmadığı iletilince gerçek ortamdaki EXECUTE yetkilerini bulup diğer ortama uygulamam gerekti. Bunun için EXECUTE yetkilerini otomatik oluşturan aşağıdaki SQL kodunu yazdım. Umarım sizin de işinize yarar.
select PE.state_desc + ' ' + PE.permission_name + ' ON ' + object_schema_name (Pe.major_id) + '.' + object_name(PE.major_id) + ' TO ' + CAST(PR.Name COLLATE Latin1_General_CI_AS as nvarchar(255))
from sys.database_permissions PE INNER JOIN sys.database_principals PR ON PE.grantee_principal_id=PR.principal_id
where PE.type='EX' and PE.major_id>0
Geçenlerde iki farklı ortamda aynı veritabanının EXECUTE yetkilerinin aynı olmadığı iletilince gerçek ortamdaki EXECUTE yetkilerini bulup diğer ortama uygulamam gerekti. Bunun için EXECUTE yetkilerini otomatik oluşturan aşağıdaki SQL kodunu yazdım. Umarım sizin de işinize yarar.
select PE.state_desc + ' ' + PE.permission_name + ' ON ' + object_schema_name (Pe.major_id) + '.' + object_name(PE.major_id) + ' TO ' + CAST(PR.Name COLLATE Latin1_General_CI_AS as nvarchar(255))
from sys.database_permissions PE INNER JOIN sys.database_principals PR ON PE.grantee_principal_id=PR.principal_id
where PE.type='EX' and PE.major_id>0
2009-02-12
SSIS'te Fuzzy Group Sorunu
Değerli Okuyucular,
Üzerinde SQL Server 2008'ın Standart Edition'ın kurulu olduğu bir sunucum vardı ve üzerinde SSIS paketlerini barındırıp istediğim yerden bu paketlere erişip çalıştırmak istiyordum. Paketi düzgünce SSIS üzerine deploy ettim. Başka sunucumdan bu paketi değişik konfigürasyonlarda denedim. Paketim düzgün çalışmadı ve sürekli hata aldım. Hata package load edememe ile ilgiliydi. Paketi Visual Studio üzerinden düzgün çalıştırabiliyordum. Demek ki server tarafında bir sorun vardı. Paketin içerisinde Fuzzy Group'ta yapılıyordu. Meğer Standart Edition Fuzzy Group'u desteklemiyormuş. Fuzzy Group için Enterprise Edition veya üstü bir sürümü istiyor. Standart Edition'ı Enterprise Edition'a Upgrade ettim sorunum çözüldü.
Bu arada Visual Studio 2005 ile hazırlanan SSIS paketlerin sadece SQL Server 2005 ile; Visual Studio 2008 ile hazırlanan paketlerin sadece SQL Server 2008 ile çalışabildiğini; benzer hatalar ile karşılaşan yada karşılaşacak değerli okuyucularıma hatırlatırım.
Üzerinde SQL Server 2008'ın Standart Edition'ın kurulu olduğu bir sunucum vardı ve üzerinde SSIS paketlerini barındırıp istediğim yerden bu paketlere erişip çalıştırmak istiyordum. Paketi düzgünce SSIS üzerine deploy ettim. Başka sunucumdan bu paketi değişik konfigürasyonlarda denedim. Paketim düzgün çalışmadı ve sürekli hata aldım. Hata package load edememe ile ilgiliydi. Paketi Visual Studio üzerinden düzgün çalıştırabiliyordum. Demek ki server tarafında bir sorun vardı. Paketin içerisinde Fuzzy Group'ta yapılıyordu. Meğer Standart Edition Fuzzy Group'u desteklemiyormuş. Fuzzy Group için Enterprise Edition veya üstü bir sürümü istiyor. Standart Edition'ı Enterprise Edition'a Upgrade ettim sorunum çözüldü.
Bu arada Visual Studio 2005 ile hazırlanan SSIS paketlerin sadece SQL Server 2005 ile; Visual Studio 2008 ile hazırlanan paketlerin sadece SQL Server 2008 ile çalışabildiğini; benzer hatalar ile karşılaşan yada karşılaşacak değerli okuyucularıma hatırlatırım.
2009-02-02
Sysadmin Rolündeki Kullanıcıları Bulma
sysadmin rolündeki kullanıcıları aşağıdaki üç farklı sorgu ile bulabilirsiniz:
- SQL Server 2005 ve sonrası için:
select name
from sys.syslogins
where sysadmin=1
SQL Server 2000 için:
select name
from syslogins
where sysadmin=1 - SQL Server 2005 ve sonrası için
SELECT p.name AS [Name]
FROM sys.server_principals r INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id
WHERE ( r.type ='R' ) and (r.principal_id =3) - EXEC sys.sp_helpsrvrolemember 'sysadmin'; -- SQL Server 2005 ve sonrasında çalışır
2009-01-14
2008 Yılı Günlük İstatistikleri
2008 yılında 36.671 tekil kişi günlüğümü ziyaret etti. Bu ziyaretçilerin 34.000'i yurt içinden 2.671'i ise yurt dışından(başta ABD, Almanya, Fransa, İngilitere ve diğer ülkelerden) ulaştı. Toplam 61.872 sayfa görüntülendi. Ziyaretçilerin %78,56'sı Internet Explorer, %19,31'i Firefox üzerinden ulaştı.
Günlüğüme 2008 yılında aşağıdaki adreslerden ulaşıldı:
İlk sırayı geçen sene olduğu gibi büyük bir farkla yine google çekiyor. Google'da bazı anahtar kelimelerle yapılan aramalarda günlüğümün ilk sıralarda gelmesi google'ın günlüğümü kayırması olsa gerek:)
Günlüğüme ziyaretçi gönderen tüm erişim kaynaklarına teşekkürlerimi iletiyorum.
Günlüğüme 2008 yılında aşağıdaki adreslerden ulaşıldı:
Sıra | Erişim Kaynağı | Ziyaret | Yüzde |
1. | www.google.com/ | 31.275 | 75,92 |
2. | www.mehmetguzel.net/ (direk) | 7.670 | 18,62 |
3. | www.ceturk.com/ | 608 | 1,48 |
4. | www.blogger.com/ | 328 | 0,80 |
5. | whos.amung.us | 214 | 0,52 |
6. | aydinunlu.blogspot.com | 70 | 0,17 |
7. | 2008.blogodulleri.com | 68 | 0,17 |
8. | www.memikyanik.com/ | 63 | 0,15 |
9. | www.search.com/ | 57 | 0,14 |
10. | www.facebook.com/ | 51 | 0,12 |
11. | www.5nk.org/ | 50 | 0,12 |
İlk sırayı geçen sene olduğu gibi büyük bir farkla yine google çekiyor. Google'da bazı anahtar kelimelerle yapılan aramalarda günlüğümün ilk sıralarda gelmesi google'ın günlüğümü kayırması olsa gerek:)
Günlüğüme ziyaretçi gönderen tüm erişim kaynaklarına teşekkürlerimi iletiyorum.
Kaydol:
Kayıtlar (Atom)
.::YASAL UYARI::.
©2004-2024 Mehmet GÜZEL, www.mehmetguzel.net
Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.
Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.