Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-08-01 Thread Nico Williams
On Wed, Aug 1, 2012 at 2:43 PM, Black, Michael (IS)
 wrote:
> You may be interested in this article:
> http://www.drdobbs.com/parallel/multithreaded-file-io/220300055?pgno=2
>
> Mutli-threaded reading of multiple files (which is basically what you're 
> talking about by splitting a file in half) is only faster if you have 
> multiple disks (in this article that's a RAID-5 system).

Or if you have a network in the way.  Think of ql.io (http://ql.io).
Think of GDA, a GNOME database API that uses SQLite3 as its
client-side engine and virtual tables to access remote databases:
since SQLite3 treats each table/index operation as synchronous GDA may
not be able to issue remote operations as fast as possible.

What would it take to have the core engine do asynchronous operations?
 First, the backend/virtual table interfaces would have to change to
be async-oriented, with functions to start operations and completion
notification, and some way to optionally share an event loop with
other components.  Second the VDBE code (and the supporting VM) would
have to have a concept of co-routines, with each co-routine having a
scratch memory register space (perhaps for a stack), and a yield-type
operation that puts the current co-routine to "sleep" until some
completion notification is received and which wakes one co-routine
that's ready to run.  Worthwhile?  Not for disk/memory DBs, no.  But
between virtual tables (see GDA) and the potential for remote
backends, I think the answer is yes.  Also, if you look at ql.io, I
think you'll really see the value in SQLite being able to do async!

Nico
--
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-08-01 Thread Simon Slavin

On 1 Aug 2012, at 8:25pm, Udi Karni  wrote:

> - only 2 processes
> - only for simple full scans where the block range can be divided in two
> - only when there is no ORDER/GROUP BY where sub results from the 2 threads
> have to be combined

Premature optimization ?  SQLite, just by itself with default compilation and a 
set of PRAGMAs which suit your requirements, is extremely fast.  Write your 
application first, and only if it turns out to be too slow worry about clever 
tricks like that.

And if it really is too slow, and you want tricks like the above, it's probably 
better to switch to a different DBMS which will itself speed things like the 
above up because it does caching and other such tricks.

Simon.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-08-01 Thread Black, Michael (IS)
You may be interested in this article:
http://www.drdobbs.com/parallel/multithreaded-file-io/220300055?pgno=2

Mutli-threaded reading of multiple files (which is basically what you're 
talking about by splitting a file in half) is only faster if you have multiple 
disks (in this article that's a RAID-5 system).

Random I/O gains a bit by threading due to the probability of intersecting 
common disk blocks.


Michael D. Black
Senior Scientist
Advanced Analytics Directorate
Advanced GEOINT Solutions Operating Unit
Northrop Grumman Information Systems


From: sqlite-users-boun...@sqlite.org [sqlite-users-boun...@sqlite.org] on 
behalf of Udi Karni [uka...@gmail.com]
Sent: Wednesday, August 01, 2012 2:25 PM
To: General Discussion of SQLite Database
Subject: EXT :Re: [sqlite] Windows I/O (was: Initial read speed greater than 
subsequent)

You are right. True Parallel Query can get very complicated. I was hoping
for something very limited for starters - for example -

- only 2 processes
- only for simple full scans where the block range can be divided in two
- only when there is no ORDER/GROUP BY where sub results from the 2 threads
have to be combined

Basically only for queries such as SELECT COUNT/MIN/MAX FROM TABLE WHERE

Sounds very limited / what's-the-point kind of thing - but it would
actually be very useful when working with large data where you find
yourself doing a lot of QA and study of the data - "how many rows have this
range of codes / are null", etc.

Having 2 processes working simultaneously might cut run times in half - and
save many minutes.

Going higher than 2 might hit disk read limitations anyway - so 2 might be
plenty for version 1.

In other words - nothing grand - just a small optimization that will kick
in on simple stuff. Pick some low hanging fruit.

A "would be nice" if not too complicated.


On Wed, Aug 1, 2012 at 5:57 PM, Christian Smith <
csm...@thewrongchristian.org.uk> wrote:

> On Sat, Jul 14, 2012 at 03:17:07PM +0100, Simon Slavin wrote:
> >
> > On 14 Jul 2012, at 3:12pm, Udi Karni  wrote:
> >
> > > I know
> > > nothing about writing DB engines - so I don't know whether adding a 2nd
> > > parallel process adds 10K or 10M to the code base.
> >
> > You've reached the limit of what I know about parallelization.  I hope
> someone else can chime in.
>
>
> Using SQLite's VM architecture, I would guess that adding this sort of
> parallelization would be non-trival. You need a parallel VM, significantly
> different to the current sequential VM, at at least a way of managing
> asynchronous IO, with perhaps a callback mechanism into the VM to handle IO
> completion. 
>
> While not certain, I guess other databases handle this by using tree based
> execution plans, where any single execution node can easily be split into
> branches to another thread/process/machine, then merged in the parent tree
> node, with each branch handling a certain key range.
>
> This might make sense, for example, with a partitioned table, where each
> partition is on it's own spindle, so a full table scan can be executed in
> parallel on each spindle and merged as a final step. So, for a table scan
> between k0 and k3, find intermediate keys to split the query between
> spindles:
>
> (k0-k3)
>   /|\
>  / | \
> /  |  \
>/   |   \
>   /|\
> (k0-k1] (k1-k2] (k2-k3)
>|   |   |
> disk1disk2disk3
>
> I sat through an Oracle internals course once, and the instructor gave us
> an example of a setup such as this where data was partitioned across 24
> disks, and the resulting full table scans were in fact quicker than index
> based scans for the data set they were using.
>
> Of course, the above would be useless for SQLite anyway, being a single
> file database. And even with the likes of Oracle, Stripe And Mirror
> Everything (SAME) might also largely defeat parallel scans.
>
> All in all, the added bloat would be measured in MB, rather than KB.
>
> Christian
>
> disclaimer: Not a practical DB implementation expert.
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-08-01 Thread Udi Karni
You are right. True Parallel Query can get very complicated. I was hoping
for something very limited for starters - for example -

- only 2 processes
- only for simple full scans where the block range can be divided in two
- only when there is no ORDER/GROUP BY where sub results from the 2 threads
have to be combined

Basically only for queries such as SELECT COUNT/MIN/MAX FROM TABLE WHERE

Sounds very limited / what's-the-point kind of thing - but it would
actually be very useful when working with large data where you find
yourself doing a lot of QA and study of the data - "how many rows have this
range of codes / are null", etc.

Having 2 processes working simultaneously might cut run times in half - and
save many minutes.

Going higher than 2 might hit disk read limitations anyway - so 2 might be
plenty for version 1.

In other words - nothing grand - just a small optimization that will kick
in on simple stuff. Pick some low hanging fruit.

A "would be nice" if not too complicated.


On Wed, Aug 1, 2012 at 5:57 PM, Christian Smith <
csm...@thewrongchristian.org.uk> wrote:

> On Sat, Jul 14, 2012 at 03:17:07PM +0100, Simon Slavin wrote:
> >
> > On 14 Jul 2012, at 3:12pm, Udi Karni  wrote:
> >
> > > I know
> > > nothing about writing DB engines - so I don't know whether adding a 2nd
> > > parallel process adds 10K or 10M to the code base.
> >
> > You've reached the limit of what I know about parallelization.  I hope
> someone else can chime in.
>
>
> Using SQLite's VM architecture, I would guess that adding this sort of
> parallelization would be non-trival. You need a parallel VM, significantly
> different to the current sequential VM, at at least a way of managing
> asynchronous IO, with perhaps a callback mechanism into the VM to handle IO
> completion. 
>
> While not certain, I guess other databases handle this by using tree based
> execution plans, where any single execution node can easily be split into
> branches to another thread/process/machine, then merged in the parent tree
> node, with each branch handling a certain key range.
>
> This might make sense, for example, with a partitioned table, where each
> partition is on it's own spindle, so a full table scan can be executed in
> parallel on each spindle and merged as a final step. So, for a table scan
> between k0 and k3, find intermediate keys to split the query between
> spindles:
>
> (k0-k3)
>   /|\
>  / | \
> /  |  \
>/   |   \
>   /|\
> (k0-k1] (k1-k2] (k2-k3)
>|   |   |
> disk1disk2disk3
>
> I sat through an Oracle internals course once, and the instructor gave us
> an example of a setup such as this where data was partitioned across 24
> disks, and the resulting full table scans were in fact quicker than index
> based scans for the data set they were using.
>
> Of course, the above would be useless for SQLite anyway, being a single
> file database. And even with the likes of Oracle, Stripe And Mirror
> Everything (SAME) might also largely defeat parallel scans.
>
> All in all, the added bloat would be measured in MB, rather than KB.
>
> Christian
>
> disclaimer: Not a practical DB implementation expert.
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-08-01 Thread Christian Smith
On Sat, Jul 14, 2012 at 03:17:07PM +0100, Simon Slavin wrote:
> 
> On 14 Jul 2012, at 3:12pm, Udi Karni  wrote:
> 
> > I know
> > nothing about writing DB engines - so I don't know whether adding a 2nd
> > parallel process adds 10K or 10M to the code base.
> 
> You've reached the limit of what I know about parallelization.  I hope 
> someone else can chime in.


Using SQLite's VM architecture, I would guess that adding this sort of 
parallelization would be non-trival. You need a parallel VM, significantly 
different to the current sequential VM, at at least a way of managing 
asynchronous IO, with perhaps a callback mechanism into the VM to handle IO 
completion. 

While not certain, I guess other databases handle this by using tree based 
execution plans, where any single execution node can easily be split into 
branches to another thread/process/machine, then merged in the parent tree 
node, with each branch handling a certain key range.

This might make sense, for example, with a partitioned table, where each 
partition is on it's own spindle, so a full table scan can be executed in 
parallel on each spindle and merged as a final step. So, for a table scan 
between k0 and k3, find intermediate keys to split the query between spindles:

(k0-k3)
  /|\
 / | \
/  |  \
   /   |   \
  /|\
(k0-k1] (k1-k2] (k2-k3)
   |   |   |
disk1disk2disk3

I sat through an Oracle internals course once, and the instructor gave us an 
example of a setup such as this where data was partitioned across 24 disks, and 
the resulting full table scans were in fact quicker than index based scans for 
the data set they were using.

Of course, the above would be useless for SQLite anyway, being a single file 
database. And even with the likes of Oracle, Stripe And Mirror Everything 
(SAME) might also largely defeat parallel scans.

All in all, the added bloat would be measured in MB, rather than KB.

Christian

disclaimer: Not a practical DB implementation expert.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-14 Thread Simon Slavin

On 14 Jul 2012, at 3:12pm, Udi Karni  wrote:

> I know
> nothing about writing DB engines - so I don't know whether adding a 2nd
> parallel process adds 10K or 10M to the code base.

You've reached the limit of what I know about parallelization.  I hope someone 
else can chime in.

Simon.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-14 Thread Udi Karni
You are right. Disk IO - even with SSD - is typically the bottleneck.
Running multiple threads would only make sense if all the data is in RAM -
:memory: DB or a giant RAM drive (remains to be tested of course and
pricey).

However - I noticed that when fully copying a master table into a :memory:
DB (and on my small machine this means no greater than 4-5GB - so not a
very conlusive test) - simple SELECT COUNT WHEREs go through the data at
about 250 MB/sec. IO is now not a factor anymore, and I doubt I am hitting
bus speed, so I suspect that this is truly a case of the CPU maxing out -
reading the pages from RAM and applying the WHERE criteria on the rows.
It's very linear. A 100GB table takes 400 seconds or 7.5 minutes. That's
where I am hoping a second concurrent thread could cut it down 50%.

But I understand this is completely not the core mission of Sqlite. I know
nothing about writing DB engines - so I don't know whether adding a 2nd
parallel process adds 10K or 10M to the code base. Just hoping that as
technology progresses and small embedded devices carry more and morer RAM -
it would be OK to slightly expand the footprint of Sqlite and add some more
"desktop" features.

This would be so incredible. As it is - Sqlite is virtually identical to
Microsoft ACCESS without the Microsoft price tag and footprint.
Multi-threaded capability would actually surpass it...

On Sat, Jul 14, 2012 at 6:51 AM, Simon Slavin  wrote:

>
> On 14 Jul 2012, at 2:31pm, Udi Karni  wrote:
>
> > (4) Get enough RAM to contain all the data and swap
>
> This may be the best solution to the problem but it's disappointing.  You
> really shouldn't need to do this.  Computers and caching algorithms should
> be doing better to help you.
>
> > In light of that - is it completely out of line to consider "light
> > parallelization" for Sqlite? Even just for the simplest SELECTs (SELECT
> > COUNT (*) WHERE AGE = NNN) ? Have Sqlite spawn 2 processes - 1 counting
> > the 1st half of the blocks of a table - the second counting the 2nd half?
> > Limited only to reads where there are no locking issues? Even capped at 2
> > threads? Only for tables greater than xGB so as not to bother with the
> tiny
> > ones? Would that introduce bloat in the code and detract from Sqlite's
> > original mission?
>
> Parallelization is of great advantage when the problem is processing:
> maths, pattern-searching, and processing of lots of data already in memory.
>  But SQLite is very efficient at doing this, with a very simple very
> searchable file format.  I think your bottleneck here isn't processing,
> it's I/O, just as you put in the 'Subject' header.  I bet your limitation
> is in your bus width, throughput, or low-level file handling.  If you
> implement parallelization the way you describe, the result will just be the
> two commands constantly fighting over access to your datastore -- back to
> bandwidth and throughput again.  Just to give you an idea, in normal setups
> the normal bottleneck for SQLite speed is the rotational speed of a hard
> disk.
>
> Simon.
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-14 Thread Simon Slavin

On 14 Jul 2012, at 2:31pm, Udi Karni  wrote:

> (4) Get enough RAM to contain all the data and swap

This may be the best solution to the problem but it's disappointing.  You 
really shouldn't need to do this.  Computers and caching algorithms should be 
doing better to help you.

> In light of that - is it completely out of line to consider "light
> parallelization" for Sqlite? Even just for the simplest SELECTs (SELECT
> COUNT (*) WHERE AGE = NNN) ? Have Sqlite spawn 2 processes - 1 counting
> the 1st half of the blocks of a table - the second counting the 2nd half?
> Limited only to reads where there are no locking issues? Even capped at 2
> threads? Only for tables greater than xGB so as not to bother with the tiny
> ones? Would that introduce bloat in the code and detract from Sqlite's
> original mission?

Parallelization is of great advantage when the problem is processing: maths, 
pattern-searching, and processing of lots of data already in memory.  But 
SQLite is very efficient at doing this, with a very simple very searchable file 
format.  I think your bottleneck here isn't processing, it's I/O, just as you 
put in the 'Subject' header.  I bet your limitation is in your bus width, 
throughput, or low-level file handling.  If you implement parallelization the 
way you describe, the result will just be the two commands constantly fighting 
over access to your datastore -- back to bandwidth and throughput again.  Just 
to give you an idea, in normal setups the normal bottleneck for SQLite speed is 
the rotational speed of a hard disk.

Simon.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-14 Thread Udi Karni
Thank you all for your advice. I use the standard Shell compiled for 64-bit
Windows - so it's single threaded - and the only way to multi-thread is to
run 2 concurrent processes on 2 concurrent Sqlite DBs - assuming there
would be no conflict with the master tables - since they are read only -
I'll need to test that.

Otherwise - seems like the options are -

(1) Windows compile optimizations
(2) OS optimizations
(3) Try Linux which is typically zippier
(4) Get enough RAM to contain all the data and swap

I completely understand why Sqlite needs to be "lite" - because it's meant
for small devices running in RAM. It's just so clever - nothing to install
- no threads, etc. - it's tempting to use on the desktop for conventional
DBs - where you really need a parallel engine if you want to cut through
large amounts of data quickly.

In light of that - is it completely out of line to consider "light
parallelization" for Sqlite? Even just for the simplest SELECTs (SELECT
COUNT (*) WHERE AGE = NNN) ? Have Sqlite spawn 2 processes - 1 counting
the 1st half of the blocks of a table - the second counting the 2nd half?
Limited only to reads where there are no locking issues? Even capped at 2
threads? Only for tables greater than xGB so as not to bother with the tiny
ones? Would that introduce bloat in the code and detract from Sqlite's
original mission?

Thanks.

On Sat, Jul 14, 2012 at 5:58 AM, Simon Slavin  wrote:

>
> On 14 Jul 2012, at 5:40am, Udi Karni  wrote:
>
> > It very easily handles billion row/100GB tables - multi-table joins,
> etc. -
> > it just chugs for a while because it's single threaded, and will gobble
> up
> > memory and swap - but it gets the job done.
>
> ... though you can, of course, do your SQLite call in a second thread and
> proceed as normal on your main thread.  Still single-threaded but it won't
> block.  I've noticed a lot of web pages which build the page, then fill in
> the contents of a table later.
>
> > It's quite amazing for a DB engine that's not even 1 MB.
>
> It's kept small partly because it's used in tiny single-core embedded
> systems: phone handsets, handheld control devices, and machine controllers.
>  I even found a SQLite header in the firmware from my TV recorder.  It has
> to run under tiny amounts of memory on simple hardware with little or no
> caching.  What's interesting is that somehow a SQL engine designed for
> hand-sized devices is so good on standard desktop computers that many
> people use it.
>
> > While it's happiest when it can do all the work in memory versus disk -
> it
> > reads fairly quickly from disk the first time around - but not
> subsequently
> > - which is why I posed the question.
>
> This characteristic is something to do with your hardware or OS, not
> something inherent in SQLite.  I bet if you tried the same thing on a Mac
> or Linux you wouldn't get the same behaviour.
>
> I seem to remember that Windows caches files with certain extensions
> specially, but I can't find any elucidation on the web.
>
> Simon.
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-14 Thread Simon Slavin

On 14 Jul 2012, at 5:40am, Udi Karni  wrote:

> It very easily handles billion row/100GB tables - multi-table joins, etc. -
> it just chugs for a while because it's single threaded, and will gobble up
> memory and swap - but it gets the job done.

... though you can, of course, do your SQLite call in a second thread and 
proceed as normal on your main thread.  Still single-threaded but it won't 
block.  I've noticed a lot of web pages which build the page, then fill in the 
contents of a table later.

> It's quite amazing for a DB engine that's not even 1 MB.

It's kept small partly because it's used in tiny single-core embedded systems: 
phone handsets, handheld control devices, and machine controllers.  I even 
found a SQLite header in the firmware from my TV recorder.  It has to run under 
tiny amounts of memory on simple hardware with little or no caching.  What's 
interesting is that somehow a SQL engine designed for hand-sized devices is so 
good on standard desktop computers that many people use it.

> While it's happiest when it can do all the work in memory versus disk - it
> reads fairly quickly from disk the first time around - but not subsequently
> - which is why I posed the question.

This characteristic is something to do with your hardware or OS, not something 
inherent in SQLite.  I bet if you tried the same thing on a Mac or Linux you 
wouldn't get the same behaviour.

I seem to remember that Windows caches files with certain extensions specially, 
but I can't find any elucidation on the web.

Simon.
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-14 Thread Kees Nuyt
On Fri, 13 Jul 2012 21:40:19 -0700, Udi Karni  wrote:


>It very easily handles billion row/100GB tables - multi-table joins, etc. -
>it just chugs for a while because it's single threaded, and will gobble up
>memory and swap - but it gets the job done.

If SQLite memory usage causes your system to swap, your sqlite cache
might be too large.

If you think you need a large cache, a good value to start with would be
30% to 40% of physical memory, divided by the database page_size.
That leaves the operating system some real memory for file system
buffers. Benchmark using that value, then benchmark with half and double
values for cache_size.

http://www.sqlite.org/pragma.html#pragma_cache_size
http://www.sqlite.org/pragma.html#pragma_default_cache_size
http://www.sqlite.org/pragma.html#pragma_page_size


Note: The PRAGMA [default_]cache_size=n; is expressed as number of
database pages, not bytes.

-- 
Regards,

Kees Nuyt

___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-13 Thread Udi Karni
Experimenting with Data Warehouse - which should really be run on a more
"mainstream" DB. Sqlite was supposed to be just for piloting and testing -
but it's such an incredible little database engine - it's hard to let it go
- so I try big things on it just for kicks - delaying the inevitable.

It very easily handles billion row/100GB tables - multi-table joins, etc. -
it just chugs for a while because it's single threaded, and will gobble up
memory and swap - but it gets the job done.

It's quite amazing for a DB engine that's not even 1 MB.

While it's happiest when it can do all the work in memory versus disk - it
reads fairly quickly from disk the first time around - but not subsequently
- which is why I posed the question.

For now - my workaround is to attach and detach for every SQL statement -
but a better solution is probably to get a server with big RAM and tune
some of those OS settings - and ultimately, maybe MySQL?

On Fri, Jul 13, 2012 at 9:16 PM, Keith Medcalf  wrote:

>
> I know the newer versions of Windows are fantastically bloated (and slower
> every version), but what are you running that uses more than 16 GB of
> committed memory?
>
> > Thanks. More RAM would clearly be helpful - but first I need a bigger
> > machine that can take it. For some reason - the "home" line of PC is
> > typically capped at 16GB or so. I'll Need more of a workstation to go
> > higher and experiment with the settings you suggested.
> >
> > On Fri, Jul 13, 2012 at 8:35 PM, Keith Medcalf 
> wrote:
> >
> > >
> > > Windows is really atrociously bad at I/O.  Windows has the same basic
> > > model of how to perform I/O as a 6 year-old.  Scratch that, the six
> year
> > > old could probably understand I/O better than whoever wrote/designed
> the
> > > crap in Windows that passes for I/O routines.
> > >
> > > Anyway, make sure that you have all the fanciful magical features
> turned
> > > OFF (they make things slower, not faster).  That is all the various
> > > "SpeedBooster" crap and so forth that Microsoft crappifies their OS
> with to
> > > give that "gee wiz" wonderful warm and fuzzy feeling to the mass
> consumer
> > > market.
> > >
> > > Second, make sure you have turned off "Large System Cache".  Force
> Windows
> > > to forgo the magic, forgo the dreadful cache design, and do I/O
> properly.
> > >
> > > Disable "Magical Virtual Machine Resizing"-- set a fixed pagefile size
> --
> > > or better yet get sufficient RAM and disable swapping altogether -- it
> is
> > > pure bull droppings that you need a pagefile that is a percentage of
> RAM
> > > size.  If it works with 4GB of RAM and a 4GB swapfile, then it will
> work
> > > better with 8 GB of RAM and no pagefile.
> > >
> > > Then increase the IOPageLockLimit to something reasonable.
> > >
> > > And if your DASD driver supports it, enable block-level I/O
> optimization
> > > and/or caching.
>
> ---
> ()  ascii ribbon campaign against html e-mail
> /\  www.asciiribbon.org
>
>
>
>
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-13 Thread Keith Medcalf

I know the newer versions of Windows are fantastically bloated (and slower 
every version), but what are you running that uses more than 16 GB of committed 
memory?

> Thanks. More RAM would clearly be helpful - but first I need a bigger
> machine that can take it. For some reason - the "home" line of PC is
> typically capped at 16GB or so. I'll Need more of a workstation to go
> higher and experiment with the settings you suggested.
> 
> On Fri, Jul 13, 2012 at 8:35 PM, Keith Medcalf  wrote:
> 
> >
> > Windows is really atrociously bad at I/O.  Windows has the same basic
> > model of how to perform I/O as a 6 year-old.  Scratch that, the six year
> > old could probably understand I/O better than whoever wrote/designed the
> > crap in Windows that passes for I/O routines.
> >
> > Anyway, make sure that you have all the fanciful magical features turned
> > OFF (they make things slower, not faster).  That is all the various
> > "SpeedBooster" crap and so forth that Microsoft crappifies their OS with to
> > give that "gee wiz" wonderful warm and fuzzy feeling to the mass consumer
> > market.
> >
> > Second, make sure you have turned off "Large System Cache".  Force Windows
> > to forgo the magic, forgo the dreadful cache design, and do I/O properly.
> >
> > Disable "Magical Virtual Machine Resizing"-- set a fixed pagefile size --
> > or better yet get sufficient RAM and disable swapping altogether -- it is
> > pure bull droppings that you need a pagefile that is a percentage of RAM
> > size.  If it works with 4GB of RAM and a 4GB swapfile, then it will work
> > better with 8 GB of RAM and no pagefile.
> >
> > Then increase the IOPageLockLimit to something reasonable.
> >
> > And if your DASD driver supports it, enable block-level I/O optimization
> > and/or caching.

---
()  ascii ribbon campaign against html e-mail
/\  www.asciiribbon.org




___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Windows I/O (was: Initial read speed greater than subsequent)

2012-07-13 Thread Udi Karni
Thanks. More RAM would clearly be helpful - but first I need a bigger
machine that can take it. For some reason - the "home" line of PC is
typically capped at 16GB or so. I'll Need more of a workstation to go
higher and experiment with the settings you suggested.

On Fri, Jul 13, 2012 at 8:35 PM, Keith Medcalf  wrote:

>
> Windows is really atrociously bad at I/O.  Windows has the same basic
> model of how to perform I/O as a 6 year-old.  Scratch that, the six year
> old could probably understand I/O better than whoever wrote/designed the
> crap in Windows that passes for I/O routines.
>
> Anyway, make sure that you have all the fanciful magical features turned
> OFF (they make things slower, not faster).  That is all the various
> "SpeedBooster" crap and so forth that Microsoft crappifies their OS with to
> give that "gee wiz" wonderful warm and fuzzy feeling to the mass consumer
> market.
>
> Second, make sure you have turned off "Large System Cache".  Force Windows
> to forgo the magic, forgo the dreadful cache design, and do I/O properly.
>
> Disable "Magical Virtual Machine Resizing"-- set a fixed pagefile size --
> or better yet get sufficient RAM and disable swapping altogether -- it is
> pure bull droppings that you need a pagefile that is a percentage of RAM
> size.  If it works with 4GB of RAM and a 4GB swapfile, then it will work
> better with 8 GB of RAM and no pagefile.
>
> Then increase the IOPageLockLimit to something reasonable.
>
> And if your DASD driver supports it, enable block-level I/O optimization
> and/or caching.
>
> ---
> ()  ascii ribbon campaign against html e-mail
> /\  www.asciiribbon.org
>
>
>
>
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users