Iako na linku http://ola.hallengren.com/Documentation.html postoje vec gotove procedure za rekreiranje i reogranizovanje indeksa, video sam da rekreiranje bas i ne radi onako kako sam hteo.
Ista stvar se moze uraditi jednostavnije, mada sporije.
Prvo cemo proveriti fragmentaciju indeksa za videti sve tabele:
select OBJECT_NAME(object_id),index_type_desc,avg_fragmentation_in_percent,page_count
from sys.dm_db_index_physical_stats(DB_ID(N'Tabela'), NULL, NULL, NULL, NULL)
order by avg_fragmentation_in_percent desc
Zatim cemo izvrsiti upit koji radi reindeksiranje za sve tabele kojima je fragmentacja veca od 1% i koji moze da traje i nekoliko desetina minuta:
DECLARE @TableName VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE TableCursor CURSOR FOR
select OBJECT_NAME(object_id) AS TableName
from sys.dm_db_index_physical_stats(DB_ID(N'Tabela'), NULL, NULL, NULL, NULL)
where avg_fragmentation_in_percent > 1
order by avg_fragmentation_in_percent desc
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @TableName
SET @cmd = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = 1)'
EXEC (@cmd)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
Thursday, May 20, 2010
Wednesday, May 12, 2010
Rekurzija u SQL-u
WITH SvaOdeljenja (OdelenjeId, NadOdelenjeId)
AS
(
SELECT OdelenjeId, NadOdelenjeId FROM Odelenje
WHERE OdelenjeId = ISNULL(@OdeljenjeId, OdelenjeId)
UNION ALL
SELECT J.OdelenjeId, M.OdelenjeId FROM Odelenje J
INNER JOIN SvaOdeljenja AS M
ON J.NadOdelenjeId = M.OdelenjeId
)
SELECT OdelenjeId FROM SvaOdeljenja
GO
AS
(
SELECT OdelenjeId, NadOdelenjeId FROM Odelenje
WHERE OdelenjeId = ISNULL(@OdeljenjeId, OdelenjeId)
UNION ALL
SELECT J.OdelenjeId, M.OdelenjeId FROM Odelenje J
INNER JOIN SvaOdeljenja AS M
ON J.NadOdelenjeId = M.OdelenjeId
)
SELECT OdelenjeId FROM SvaOdeljenja
GO
Thursday, May 6, 2010
Ali ZAŠTO? (jeftina radna snaga)
Cilj svakog pojedinca i firme je da prodje što jefitnije. Takodje, cilj svakog pojedinca je da bude što skuplje plaćen za svoj posao, a firmi da što više profitira.
Ovde nema vage, niti ću ulaziti u polemiku koja su merila, ali ono sto je osnov je da NEMA relanog, ni u jednom ni u drugom smislu vrednosti, ali treba imati neke umu da nekad najjefitnije ipak može da ne valja uopšte i da vredi ništa, tj 0 (nula), čega god.
Uzimam za primer projekat koji je vredan 100.000 evra, a za koji je programer (koji je inače bio i student) mesečno plaćan 300, iste monete (naravno po srpski bez doprinosa, odmora, zdravstvenog i dr.).
Sledi .NET kod:
public void Delete(Porez porez)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "DELETE FROM PoreskaObaveza";
if (porez != null)
{
command.CommandText += " WHERE PoreskaObavezaId = @PoreskaObavezaId";
command.Parameters.Add(new SqlParameter("@PoreskaObavezaId", porez.Id));
}
connection.Open();
command.Connection = connection;
result = command.ExecuteNonQuery();
}
}
Da bude jasnije, u ovom slučaju ako se pozove metoda Delete(null) svi podaci iz tabele PoreskaObaveza ĆE BITI OBRISANI!!!
Biznismeni, da li i dalje želite da plaćate na sitno neiskusne programere za vaše skupe projekte koje predajete klijentima BEZ ikakve provere kvaliteta?!
Ovde nema vage, niti ću ulaziti u polemiku koja su merila, ali ono sto je osnov je da NEMA relanog, ni u jednom ni u drugom smislu vrednosti, ali treba imati neke umu da nekad najjefitnije ipak može da ne valja uopšte i da vredi ništa, tj 0 (nula), čega god.
Uzimam za primer projekat koji je vredan 100.000 evra, a za koji je programer (koji je inače bio i student) mesečno plaćan 300, iste monete (naravno po srpski bez doprinosa, odmora, zdravstvenog i dr.).
Sledi .NET kod:
public void Delete(Porez porez)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "DELETE FROM PoreskaObaveza";
if (porez != null)
{
command.CommandText += " WHERE PoreskaObavezaId = @PoreskaObavezaId";
command.Parameters.Add(new SqlParameter("@PoreskaObavezaId", porez.Id));
}
connection.Open();
command.Connection = connection;
result = command.ExecuteNonQuery();
}
}
Da bude jasnije, u ovom slučaju ako se pozove metoda Delete(null) svi podaci iz tabele PoreskaObaveza ĆE BITI OBRISANI!!!
Biznismeni, da li i dalje želite da plaćate na sitno neiskusne programere za vaše skupe projekte koje predajete klijentima BEZ ikakve provere kvaliteta?!
Subscribe to:
Comments (Atom)