tarafından

Tablo ve Indekslerin Diskte Kapladıkları Yeri Sorgulama (MS SQL Server)



— kaynak: http://stackoverflow.com/questions/15896564/get-table-and-index-storage-size-in-sql-server
SELECT
s.Name AS SchemaName,
t.NAME AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) – SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%' — filter out system tables for diagramming
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
s.Name, t.Name

view raw

gistfile1.txt

hosted with ❤ by GitHub

tarafından

Bir Kelimenin Bir Karakter Dizgisi İçindeki Tekrarlanma Sıklığını Bulma (SQL)


Bir kelime ya da karakterin, bir karakter dizgisi (string) içinde kaç defa geçtiğini bulmak için aşağıdaki SQL kullanılabilir.


/*
Bir Kelimenin Bir Karakter Dizgisi İçindeki Tekrarlanma Sıklığını Bulma
*/
DECLARE @wordToFind varchar(3) = 'Hello'
DECLARE @text varchar(300) = 'Hello World! Hello World! Hello World!'
SELECT (LEN(@text) – LEN(REPLACE(@text, @wordToFind, ''))) / LEN(@wordToFind) AS Tekrar

view raw

gistfile1.txt

hosted with ❤ by GitHub

tarafından

SQL’de ParseName Metodu (Sql Server)


SQL Server 2005 ve sonrası tarafından desteklenen PARSENAME komudu, SQL Server nesne isimlerinin nokta ile ayrılmış kısımlarını programatik anlamda kolay bir şekilde almak için tasarlanmış bu metot.

SQL Server’da nesne ismi aşağıdaki biçimde:

<sunucu ismi>.<veritabanı ismi>.<şema ismi>.<nesne ismi>

PARSENAME(nesne_ismi, kisim_no) şeklinde iki parametre alan bu metotta noktaya göre verilen değer kısımlara ayrılır. Kısım numarası 1 ile 4 arasında olup son kısım 1 ile alınabilir.

Örnek:
SELECT PARSENAME('AnaSunucu.KullaniciDB.dbo.Kullanicilar', 1)

'Kullanicilar'

Her ne kadar bu metot, nesne isimleri için tasarlanmış olsa da nokta (.) ile ayrılmış tüm verileri ayırmak için kullanılabilir. Ama iki kısıt olduğunu unutmamak lazım:
1. Son kısmı 1 ile alırken, ilk kısmı 4 sayısı ile alabilirsiniz.
2. En fazla 3 nokta içeren karakter dizeleri (yani noktalarla dörde ayrılmış) parametre olarak verilebilir. 3 noktadan fazlası varsa metot işe yaramıyor.

Kaynak: https://msdn.microsoft.com/en-us/library/ms188006.aspx

tarafından

C#’ta TryParse Metodu ile Karakter Dizilerini (String) Sayıya Çevirme


Kod yazarken genellikle karşılaşılan durumlardan biri, karakter dizilerinin (String) sayısal değerlere çevrilmesidir.

Web programlama alanından bir örnek ele alalım. http://www.herurunburada1TLsendealpismanolma.com/goster.aspx?id=123 şeklinde bir istek yapıldığı zaman goster.aspx içindeki kodda 123 değerini sayıya çevirmek gerekecektir. Bunun için aşağıdaki gibi bir kod yazabiliriz:

string idStr = Request.QueryString["id"];
int id = Convert.ToInt32(idStr);

Yukarıdaki kod geçerli, derlenebilen bir kod olmakla beraber id değerinin her zaman sayı olabileceğini varsayan bir kod ki oldukça yanlış bir varsayım. id değerinin sayısal bir değer olmayacağını da hesaba katarsak kodu aşağıdaki şekilde değiştirebiliriz:

string idStr = Request.QueryString["id"];
int id = 0;
try {
Convert.ToInt32(idStr);
} catch {
return;
}

Bir çevirme işlemi için 7 satır yazmamız gerekti. Bunu biraz daha sıkıştırsak 4-5 satıra düşürebiliriz. Ama bunu daha güzel ve aynı zamanda daha performanslı bir şekilde yapmanın yöntemi var. O da TryParse metodu:

int id = 0;
if(!int.TryParse(Request.QueryString["id"], out id)) return;

TryParse metoduna iki parametre geçiriliyor. İlki çevirmek istediğimiz değer, ikincisi de eğer çevrim işlemi gerçekleşirse yeni değerin eşitleneceği değişken (bu yüzden out anahtar kelimesini kullanmak gerekli). İşin güzel kısmı, çevrim işlemi başarılı olursa true, başarısız olursa false döndürüyor. Bu kalıp sadece int için değil; double, float, char, bool gibi primitif türler ve DateTime sınıfı için de geçerli. Bu kalıpla .Net kütüphanesi içinde başka yerlerde de karşılabilirsiniz. Genel bir problem için güzel bir çözüm.

Mutlu kodlamalar! :)

Not: Parse işlemleri için http://www.dotnetperls.com/tryparse adresine bir göz atabilirsiniz.

tarafından

Kitlenmiş Tabloların (Locked Table) Listesi (MS SQL SERVER)


Aşağıdaki sql kodu ile kitlenmiş tabloları (Locked Table) ve hangi işleminin tabloları kitlediğinin listesini alabilirsiniz.


SELECT DTL.resource_type
,CASE
WHEN DTL.resource_type IN (
'DATABASE'
,'FILE'
,'METADATA'
)
THEN DTL.resource_type
WHEN DTL.resource_type = 'OBJECT'
THEN OBJECT_NAME(DTL.resource_associated_entity_id, SP.[dbid])
WHEN DTL.resource_type IN (
'KEY'
,'PAGE'
,'RID'
)
THEN (
SELECT OBJECT_NAME([object_id])
FROM sys.partitions
WHERE sys.partitions.hobt_id = DTL.resource_associated_entity_id
)
ELSE 'Unidentified'
END AS requested_object_name
,DTL.request_mode
,DTL.request_status
,DEST.TEXT
,SP.spid
,SP.blocked
,SP.STATUS
,SP.loginame
FROM sys.dm_tran_locks DTL
INNER JOIN sys.sysprocesses SP ON DTL.request_session_id = SP.spid
–INNER JOIN sys.[dm_exec_requests] AS SDER ON SP.[spid] = [SDER].[session_id]
CROSS APPLY sys.dm_exec_sql_text(SP.sql_handle) AS DEST
WHERE SP.dbid = DB_ID()
AND DTL.[resource_type] <> 'DATABASE'
ORDER BY DTL.[request_session_id];

Sonuç tablosu içerisinde aşağıdaki kolonlar yer almaktadır.

  • resource_type
  • requested_object_name
  • request_mode
  • request_status
  • TEXT
  • spid
  • blocked
  • STATUS
  • loginame

Kolonların daha detaylı açıklamasını aşağıdaki link üzerinden bulabilirsiniz.

https://msdn.microsoft.com/en-us/library/ms190345.aspx

tarafından

Yürütme Planı (Execution Plan) Sorgularının Listesi (MS SQL SERVER)


Aşağıdaki sql kodu ile ms sql server önbellekte tutulan yürütme planlarının (execution plan) ne kadar yer kapladığını ve hangi sorguların önbellekte tutulduğunun listesini görebilirsiniz.


SELECT cp.bucketid,cp.size_in_bytes, st.text
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st

tarafından

Execution Plan ve Memory Buffer Temizlemek (MS SQL Server)


Aşağıdaki SQL kodu ile MS SQL Server bellekte tuttuğu yürütme planlarını (execution plan) ve memory buffer temizleyebilirsiniz.


go
checkpoint;
go
dbcc dropcleanbuffers;
go
dbcc freeproccache;
go

Bu işlemi sorgu performanslarını test ederken kullanabilirsiniz. Birden fazla sorgunun performans açısından karşılaştırılmasında yürütme planlarının ve memory buffer alanının temizlenip test edilmesi daha doğru bir sonuç verecektir.

tarafından

Hangi Veritabanı Önbellekte Ne Kadar Yer Tutuyor? (MS SQL Server)


Aşağıdaki SQL kodu ile MS SQL Server üzerinde bulunan tüm veritabanlarının önbellekte ne kadar yer tuttuğunu öğrenebilirsiniz.


/*
MS SQL Server'da hangi veritabanının ne kadar yer tuttuğunu gösteren aşağıdaki SQL'in çalışma süresi,
veritabanı büyüklüğüyle doğru orantılıdır. Birkaç dakika sürebilir.
*/
SELECT CAST(COUNT(1) * 8 / 1024.0 AS NUMERIC(10, 2)) AS CachedDataMB,
CASE database_id WHEN 32767 THEN '* Resource DB' ELSE DB_NAME(database_id) END AS DatabaseName, database_id DatabaseID
FROM sys.dm_os_buffer_descriptors
GROUP BY DB_NAME(database_id) , database_id ORDER BY DB_NAME(database_id)

Önbellek kullanımı sayesinde, veritabanı nesneleri ve sorguların yürütme planları (execution plan) sunucu hafızasında tutulur. Bu sayede hafızadan okumaya nazaran çok daha yavaş bir işlem olan diskten okuma işlemi yerine hafızadan okuma işlemi yapılarak performans artışı sağlanır.

Bir veritabanının ne kadar yer tuttuğunu ise aşağıdaki komut ile öğrenmek mümkün:

sp_spaceused

Veritabanının diskte tuttuğu yer ile önbellekte kullandığı yeri, yukarıda belirttiğimiz sql sorgusu ve sp_spaceused prosedürünü kullanarak karşılaştırabilirsiniz.

tarafından

SQL ile Otomatik Artan Birincil Anahtar (Auto-Increment Primary Key) Nasıl Eklenir? (MS Sql Server)


Yeni Tablo Oluştururken
Saf sql kodu ile SQL Server’da tablo oluştururken artan birincil anahtar (auto increment primary key) eklemek gerekirse aşağıdaki örnek sql kodu size yardımcı olabilir:

CREATE TABLE KULLANICILAR (kullaniciID int NOT NULL IDENTITY (1,1) PRIMARY KEY, kullaniciAdi nvarchar(100))

IDENTITY (1,1) ile KULLANICILAR tablosuna girilen kayıtların kullaniciID değerleri 1 ile başlayıp 1’er 1’er artması sağlanır. IDENTITY(1000,1) yazmış olsaydık, ilk girilen kayıtta kullanciID 1000 olurdu.

Mevcut Tabloya Nasıl Eklenir?
Bir de mevcut bir tabloya, tek satırda nasıl eklenir, onu görelim:

ALTER TABLE KULLANICILAR ADD kullaniciID int NOT NULL IDENTITY (1,1) PRIMARY KEY

Bir diğer yolu da CONSTRAINT tanımı ile yapılabilmesi:

ALTER TABLE KULLANICILAR
ADD kullaniciID int NOT NULL IDENTITY (1,1),
ADD CONSTRAINT PK_KULLANICILAR PRIMARY KEY CLUSTERED (kullaniciID)

ALTER TABLE ile ilgili olarak MSDN makalesine de göz atabilirsiniz.

tarafından

Metin Dosyalarını Tek Bir Dosyada Birleştirmek (MS-DOS)


Aynı dizinde bulunan metin dosyalarını tek bir metin dosyası olarak birleştirmek için MS-DOS’ta aşağıdaki komut kullanılabilir.

copy *.txt tekdosya.txt

*.txt, tüm txt uzantılı dosyalar anlamına gelmektedir.

copy komudunun çalıştırıldığı dizinden farklı olarak başka bir dizinde (örneğin d:\dosyalar) işlem yapmak istenirse aşağıdaki kod kullanılabilir:

copy d:\dosyalar\*.txt d:\dosyalar\tekdosya.txt