en-USsv-SE
You are here:   Forum
HomeHomeDiscussionsDiscussionsHjälp!Hjälp!Hantering av LOB-DataHantering av LOB-Data
Previous
 
Next
New Post
9/13/2011 1:50 PM
 
Hej,
Har lite funderingar angående laddning av LOB-data i SQL-Server 2005.
Har för mig att jag läst någonstans att sql-server mellanlagrar LOB-data innan det skrivs ner i datafilen, stämmer detta?
Var mellanlagras detta data isf? Kan man styra om detta flöde till annan plats/disk?

Tacksam för svar
Johan
 
New Post
9/13/2011 11:08 PM
 

Hej!

Hoppas jag förstår dig rätt om du tänker på LOB-data typerna (text, ntext eller image) och dess lagring eller är det lite mera klassiskt problem att databasen är svulstig pga bildlagring i denna.
Nåväl ska försöka att inte svamla till det för mycket.
SQL Server lagrar sin data i Pages á 8 KB.
Men då en tabell kan ha för breda kolumner för att rymmas i samma Page så lagras standardmässigt LOB-data utanför denna så det bara är en pekare dit.
Det finns en parameter att sätta på tabell nivå för att om det får plats lagras istället LOB-datat i samma Page: EXEC sp_tableoption N'MyTable', 'text in row', 'ON'
Lite bättre beskrivet:
http://msdn.microsoft.com/en-us/libra...
Har läst att man kan få bättre prestanda om den inställningen väljs och att det får rum i samma Page men förmodar att man måste upp i rätt stora och belastade tabeller med många rader för att få den fördelen och det kan vara en tung operation att ändra i efterhand.

Rekommendationen är förstås att fasa ut de gamla datatyperna och istället gå över till varchar(max), nvarchar(max), varbinary(max) och xml då de tidigare kommer att sluta stödjas i kommande SQL versioner och det finns så mycket bättre möjligheter med de nya.
Tag tex xml data typen vilket det går att plöja ner sig i ett år eller två.

http://www.sqlmag.com/article/sql-ser...


Mvh
Lars
 
New Post
9/14/2011 10:16 AM
 
Hej igen,
Va nog väldigt otydlig i min fråga, skall försöka vara mer tydlig.
Ett ex: 
En batchhanterad inläsning av data från en maskin till en annan där en kolumn är LOB-data (läs image).
Hastigheten på en batch a 1000 poster tar väldigt mycket mer tid att exikvera än om man utesluter LOB-datakolumnen. Inläsningshastigheten sjunker drastiskt när man lägger på LOB-datat.
Den totala datamängden för en rad är ung 42kb med LOB-datat inkluderat.
Vi läser alltid in datat i en tom tabell som sedan switchas in i måltabellen.

Har för mig att när man använder sig av datapump med SSIS mellan två maskiner så mellanlagrar datapumpen LOB-datat innan det läses ner det i databasen. 


Försöker få ner inläsningstiden för vår laddning.

Mvh
Johan
 
New Post
5/25/2012 8:19 PM
 
http://msdn.microsoft.com/en-us/libra...

USE AdventureWorks
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), Document varbinary(max))
GO

INSERT INTO myTable(FileName, FileType, Document)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
* FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
GO
 
New Post
5/25/2012 8:28 PM
 
Var egentligen inte svar på din fråga, men det kanske är en ide...
Sedan för att repetera vad Lars redan sagt.

Orsaken till att det tar tid med lob är att de lagras out of row, se det som att effekten blir som en nästlad loop. För varje rad blir det en massa icke sekvensiell io för att lokalisera lob.

I 2008 fick vi FileStream, och i 2012 har vi FileTable(vidareutveckling på FileStream konceptet), för att hantera lob genom databasen fast i en fysisk struktur avsedd för ostrukturerat data, dvs NTFS.

Kanske inte svar på dina frågor det heller.

Blobben skrivs i ramminne, till transaktionsloggen, för att sedan vid checkpoint skrivas i datafilen. Du märker att loggen växer när du skriver data i din databas.

Gällande SSIS kan jag rekommendera den här länken: http://www.mssqltips.com/sqlservertip...


 
Previous
 
Next
HomeHomeDiscussionsDiscussionsHjälp!Hjälp!Hantering av LOB-DataHantering av LOB-Data


Annons