Re: FTS query performance on SQL 2005



Hello Hilary,

I've found that this greatly improved in sql 2005.
Simon Sabin
SQL Server MVP
http://sqlblogcasts.com/blogs/simons


Note that it is not the SQL Server cache where the queries are cached,
but rather the full-text catalog pages which are cached in the file
system cache (which oddly enough turns out to be the most efficient
caching mechanism not only for SQL FTS, and other Microsoft Search
products, but also for Lucene).

Here is an example:

Issue this query

Select * from myfulltexttable where contains(*,'test')

and observe the length taken. Repeat the query and not the decrease in
time due to caching then clear the procedure cache and data cache

declare @int int
select @int=db_id()
DBCC FLUSHPROCINDB (@int)
DBCC DROPCLEANBUFFERS
try again and note the time taken is still better than the first time
due to caching advantages in the file system:

Select * from myfulltexttable where contains(*,'test')

Stop and start msftesql and repeat the query, note the time. Again
caching advantages.

This posting is my own and doesn't necessarily represent
RelevantNoise's positions, strategies or opinions.

Looking for a SQL Server replication book?
http://www.nwsu.com/0974973602.html
Looking for a FAQ on Indexing Services/SQL FTS
http://www.indexserverfaq.com
"Simon Sabin" <SimonSabin@xxxxxxxxxxxxxxx> wrote in message
news:62959f1a2a9338c8cc15dcf18530@xxxxxxxxxxxxxxxxxxxxxxx

Hello Bahama,

Its caching, when the server restarts there is nothing in memory so
everything has to be retrieved from disk. Once its been read from
disk it stays in the cache until something pushes it out. If you are
just doing contains table then all that needs to be cached is ids and
they're quite small. so even if the id's are 20 bytes, 20 million
rows is 400Mbytes.

What version of SQL server are you using?

Simon Sabin
SQL Server MVP
http://sqlblogcasts.com/blogs/simons
I have achieved a breakthrough in this performance testing, whereby
now all of my queries return in under 1/2 second. All of my testing
was being performed right after a server reboot in an attempt to
eliminate any effects of cached query results. However, I also found
that sqlservr.exe was using very little memory during this time, and
during those long queries, the memory usage was steadily increasing.
I also found that once sqlservr.exe settled out at around 740MB of
memory usage, that all queries responded very quickly. So, before
doing any testing, I rebooted the server, allowed all processes to
fully startup, then issued a query that returned nearly all rows in
the database, such as "select count(1) from containstable(Item,
ItemText, 'is')", since the word "is" is in almost every row in my
database. (BTW, I have blanked out my "noise file", since I need all
those words to be searchable.) That query for "is" takes several
minutes, but at the end of that query, my sqlservr.exe process has
reached about 740MB of memory usage. From that point on, the
sqlservr.exe process memory usage does not increase any more, and
all queries (including those that were taking several minutes) now
return in under 1/2 second.

Can anyone out there provide an under-the-covers explanation for the
behavior that I'm seeing? Is it that the full-text index (with 1.4
million unique keys) is being cached in memory, after which the
performance improves? If that's the case, why wouldn't that memory
be used by the msftesql.exe process instead of the sqlservr.exe
process?

Thanks for any insights.



.



Relevant Pages

  • Re: How to clear memory usage after executing queries ?
    ... got scared when the memory usage reached 1.7 gig (the machine has 2 gig of ... select distinctfrom packet, then do query ... > Columnist, SQL Server Professional ... > The only way to clear up the memory usage is by stopping SQL Server Service ...
    (microsoft.public.sqlserver.programming)
  • Re: Full Text Search Performance
    ... >> The simplest query that uses the smiplest form of FT on the first table FT ... >> very powerful SAN system. ... Memory usage on the server is not very high so I ... >> SQL Server. ...
    (microsoft.public.sqlserver.fulltext)
  • Re: How to clear memory usage after executing queries ?
    ... So even if the SQL Server memory usage reached 1.7 gig (the machine has 2 ... > the first query put them there. ...
    (microsoft.public.sqlserver.programming)
  • How to clear memory usage after executing queries ?
    ... We have a SQL Server 2000 database that has about 10 million records. ... found this index execute the query that I want the fastest. ... The only way to clear up the memory usage is by stopping SQL Server Service ...
    (microsoft.public.sqlserver.programming)
  • Re: CONTAINS performance
    ... That said, and with the query plan, I can start to give you more ... relational join in the context of the free-text optimization, ... SQL Server tables. ...
    (microsoft.public.sqlserver.fulltext)