Ocak 2016

Tekrar merhaba,

Öncelikle sunucu değiştirme ve diğer başka sebeplerden dolayı wordpres yazılarımı tekrar girmem gerekti, bu durumdan dolayı kısa bir aksama oldu. Özür dilerim sanki çok önemsiyen varmış gibi. 😀

Ama şunu belirtmek isterim ki barındırma için godaddy bir felaketti ve digitalocean bir harika.

Nasipse bu süreçte öğrendiklerimden yola çıkarak bir iki yazı yazmayı düşünüyorum.

Çalışan Sql Sorgularını ve Sürelerini Bulmak

Darboğazlarla karşılaştığımızda ne yaparız?
Tabiki sebep olan işlemi bulmak isteriz..

İşte size bu iş için kısa bir çözüm.

SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

Bir diğer Sql i de Pinal Dave den alıntı yapıyorum:

SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO

Detaylar için :

http://blog.sqlauthority.com/2010/10/06/sql-server-quickest-way-to-identify-blocking-query-and-resolution-dirty-solution/

Filtrelenmiş indexlerin nimetlerini araştırırken bulduğum güzel bir yazıyı  paylaşmak istiyorum. Aslında belli bir kritere göre nunclustered indexleri silme ile ilgili bir yazı arıyordum. Baktım güzel bilgiler var okuma ve paylaşma gereği hissettim. Buyrun (bu yazınınöncüsü de var aslında)

Gmail Üzerinden Mail Göndermek

Merhabalar,

Gmail üzerinden mail gönderme ihtiyacı benim gibi vasat yazılımcıların karşısına sıkça çıkmaktadır.
Genelde ufak çaplı, kurumsal olmayan işlerde ihtiyaç duyduğumuz Gmail Üzerinden Mail Gönderme işi ilk kez bunu deneyenlere biraz can sıkıcı gelebilmektedir. Bu yazıda bu can sıkıcı durumun üstesinden canımızı sıkmadan gelmenin yollarını anlatacağım.

Soruları duyar gibiyim ..

  • .Net ile nasıl göndereceğim?

System.Net ve System.Net.Mail namespace lerini kullanarak SmtpClient sınıfı ile.

  • Hangi portu kullanacağım?

587 nolu portu kullacaksınız.

  • ssl kullanacak mıyız?

Evet ssl kullanacağız

Basitçe metodumuz şu şekilde olacak

public static void GmailUzerindenMailGonder(string gonderen, string alici, string konu, string icerik, string kullaniciAdi, string kullaniciSifre)

{

var client = new SmtpClient("smtp.gmail.com", 587)

{

Credentials = new NetworkCredential(kullaniciAdi, kullaniciSifre),

EnableSsl = true

};

client.Send(gonderen, alici, konu, icerik);

}

C# ile mail göndermek nekadar basit değil mi?

İşte canınızı sıkan sorunlar burada başlıyor.

Herşeyi aynen yaptım niye hata alıyorum?

Çünkü “Google Güvenliğe Önem Veriyor”

İçeriğini anlamadığımız hataların sebebi üzerinde mail göndermeye çalıştığımız gmail hesabının güvenlik ayarları.

Google ın uygulamaya koyduğu 2 seviyeli güvenlik ayarlarını yaparak ve dahiyane bir fikir olan uygulamaya özel şifre üreterek bu problemlerden kurtulabilir ve aynı zamanda güvenliğimizi de üst seviyeye çıkarabiliriz.

Bunun için

  • ilgili gmail hesabını açarak hesap ayarlarından güvenlik sekmesini açıyoruz.

Google Hesap Ayarları

Google Hesap Ayarları – Güvenlik Sekmesi

  • 2 seviyeli güvenlik özelliğini aktif etmek için hazırlanmış sihirbazı açıyoruz.

2 Seviyeli Güvenlik

  • cep telefon bilgimizi sms ile doğruluyoruz.
  • cep doğrulama işleminden sonra ilk işimiz yedek kod üretmek olmalı, çünkü cep telefonumuz yanımızda olmadığı durumlarda bu kodları kullanacağız.

Google Hesap Ayarları – Yedek Kodlar

  • ardından uygulamaya özel şifreler tabına geçerek sadece mail göndermek için kullanacağımız bir şifre üretiyoruz.
  • gmail içindeki ayarlardan POP ve IMAP ı da açmayı unutmayalım..

Gmail Ayarlar Menüsü

Gmail Ayarlar Menüsü – Yönlendirme ve Pop Ayarları

  • ve işlem tamam.

Bundan sonrası çok kolay, mail atarken gmail e oturum açarken kullandığımız şifrenin yerine uygulamaya özel oluşturduğumuz şifreyi yazarak deneyelim.. işte oldu..

Hepinize kolay gelsin, umarım yardımcı olmuştur.

 

Javascript ile html nesnelerinin yerini değiştirme

Javascript ile html nesnelerinin yerini değiştirme, yukarı aşağı kaydırma ve nesne silme işlemlerini basitçe nasıl yapabiliriz, işte size ufak bir örnek.

Başlık

<input type='text' id='baslik' name='baslik' />Değer

<input type='text' id='deger' name='deger' />

<input type='button' value='Ekle' onclick="AddItem()" />

<input type='button' value='Temizle' onclick="Clear()" />

<div id="data-list" name="data-list">

    <ul>

    </ul>

    <div id="data-list-count"></div>

</div>

function AddItem() {

    var baslik = $("#baslik").val();

    var deger = $("#deger").val();

    var dataListCount = GetCount();

    var dataListObj = $("#data-list").find("ul");

    var removeBtnText = "<a href='#' onclick='RemoveItem(event)'>Çıkar</a> ";

    var upBtnText     = "<a href='#' onclick='UpItem(event)'     >Yukarı</a> ";

    var downBtnText   = "<a href='#' onclick='DownItem(event)'>Aşağı</a> ";

    var itemText = "<li>"+dataListCount+" - " + removeBtnText + downBtnText + upBtnText + "<span class='badge'>" + deger + "</span>" + baslik + "</li>";

    dataListObj.append(itemText);

    UpdateCount();

}

function RemoveItem(e) {

    var evt = e || window.event; // this assign evt with the event object

    var current = evt.target || evt.srcElement; // this assign curr

    if($(current).parent().is("li")) {

        $(current).parent().remove();

    }

    UpdateCount();

}

function UpItem(e) {

    var evt = e || window.event; // this assign evt with the event object

    var current = evt.target || evt.srcElement; // this assign curr

    var upItem = $(current).parent().prev();



    if (upItem !== null && upItem.is("li")) {

        $(current).parent().swapWith(upItem);

    }

    UpdateCount();

}

function DownItem(e) {

    var evt = e || window.event; // this assign evt with the event object

    var current = evt.target || evt.srcElement; // this assign curr

    var downItem = $(current).parent().next();



    if (downItem !== null && downItem.is("li")) {

        $(current).parent().swapWith(downItem);

    }

    UpdateCount();

}

function Clear() {

    var baslik = $("#baslik").val();

    var deger = $("#deger").val();

    var dataListObj = $("#data-list").find("ul");

    dataListObj.empty();

    UpdateCount();

}

$.fn.swapWith = function(swap_with_selector) {

    var el1 = this;

    var el2 = $(swap_with_selector);



    if ( el1.length === 0 || el2.length === 0 )

        return;



    var el2_content = el2.html();

    el2.html(el1.html());

    el1.html(el2_content);

};

function GetCount()

{

    return $("#data-list").find("ul").find("li").length;

}

function UpdateCount() {

    $("#data-list-count").text("Toplam " + GetCount() + " seçenek");

}

Sql Server Çok Sayıda Satırı Silme

Bazen çok sayıda satırı silmeniz gerekebilir. “Çok sayıda” biraz göreceli bir kavram olduğu için izah etmekte fayda var. Burada bahsedilen “çok sayıda” benim karşılaştığım 100 milyon satır gibi durumlar olabileceği gibi 10 bin satır gibi de olabilir. 10 bin satır altında böyle bir işleme bence gerek yok. Yalnız bazı istisnai durumlarda 10 binlik silme işleminde de gerekebilir. Örneğin çok fazla trigger a sahip olan tablolardan silme işlemi yaparken.

Ben genelde bu tür işlemleri sqlserver görevi oluşturarak ve sistemin en az yoğun olduğu saatlere zamanlayarak gerçekleştiriyorum. Size de tavsiyem budur. Yalnız burada dikkat edilmesi gereken bir konu daha mevcut, o da bu adreste izah edilmekte.

 

 DECLARE @RowsDeleted INTEGER
 DECLARE @RowPerDeletion INTEGER
 DECLARE @Yil INTEGER
 
 SET @RowPerDeletion = 10000
 SET @RowsDeleted = 1
 
 WHILE (@RowsDeleted &gt; 0)
 BEGIN
 DELETE TOP(@RowPerDeletion)  — isterseniz filtreleme de yapabilirsiniz
 SET @RowsDeleted = @@ROWCOUNT
 END

Sql Server Index Boyutlarını Tespit Etme

Sql server veritabanı üzerindeki tablolara koyduğunuz indexlerin KB cinsinden nekadar alan kapladığını siz de merak etmişsinizdir. İşte size bunu tespit edebileceğiniz sorgu. Pinal Dave’in sayfasından alıntılıyorum.

Detaylı bilgi için tıklayın

 

SELECT
OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.name AS IndexName,
i.index_id AS IndexID,
8 * SUM(a.used_pages) AS 'Indexsize(KB)'
FROM sys.indexes AS i
JOIN sys.partitions AS p ON p.OBJECT_ID = i.OBJECT_ID AND p.index_id = i.index_id
JOIN sys.allocation_units AS a ON a.container_id = p.partition_id
GROUP BY i.OBJECT_ID,i.index_id,i.name
ORDER BY OBJECT_NAME(i.OBJECT_ID),i.index_id

Sql Server Index Kayıt Sayıları

Veritabanınızdaki tablolarda çeşitli indexleriniz var ve bu indexlerin sayılarını meraktan veya ihtiyaçtan öğrenmeniz gerekiyor.. İşte size hazır sorgu..

SELECT
i.index_id IndexID,
i.name IndexName,
SUM(p.rows) TableRows,
o.name TableName
FROM sys.objects o
INNER JOIN sys.partitions p on o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.index_id = p.index_id AND p.object_id = i.object_id
WHERE OBJECTPROPERTY(o.object_id,'IsUserTable') = 1
GROUP BY i.name,i.index_id, o.name