pdf viewer in asp net c# : How to add image to pdf reader software SDK cloud windows winforms azure class postgresql-9.4-A447-part2969

Chapter 14. Performance Tips
usingthe other
WHERE
condition. Or it could joinB to Cand then joinA tothatresult. Or it couldjoin
Ato C and then join them with B — but that would be inefficient, since the full Cartesian product of
Aand C would have to be formed, there being no applicable condition in the
WHERE
clause to allow
optimization of the join. (All joins in the PostgreSQL executor happen between two input tables, so
it’s necessary to build up the result in one or another of these fashions.) The important point is that
these different join possibilities give semantically equivalent results but might have hugely different
execution costs. Therefore, the planner will explore all of them to try to find the most efficient query
plan.
When a query only involves two or three tables, there aren’t many join orders to worryabout. But the
number of possible join orders grows exponentially as the number of tables expands. Beyondtenor so
input tables it’s no longer practical to do an exhaustive search of all the possibilities, and even for six
or seven tables planning might take an annoyingly long time. When there are too many input tables,
the PostgreSQL planner will switch from exhaustive search to a genetic probabilistic search through
alimited number of possibilities. (The switch-over threshold is set by the geqo_threshold run-time
parameter.) The genetic search takes less time, but it won’t necessarily find the best possible plan.
When the query involves outer joins, the planner has less freedom than it does for plain (inner) joins.
For example, consider:
SELECT
*
FROM a LEFT JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
Although this query’s restrictions are superficially similar to the previous example, the semantics are
different because a row must be emitted for each row of A that has no matching row in the join of B
and C. Therefore the planner has no choice of join order here: it must join B to C and then join A to
that result. Accordingly, this query takes less time to plan than the previous query. In other cases, the
planner might be able to determine that more than one join order is safe. For example, given:
SELECT
*
FROM a LEFT JOIN b ON (a.bid = b.id) LEFT JOIN c ON (a.cid = c.id);
it is valid to join A to either B or C first. Currently, only
FULL JOIN
completely constrains the join
order. Most practical cases involving
LEFT JOIN
or
RIGHT JOIN
can be rearranged to some extent.
Explicit inner join syntax(
INNER JOIN
,
CROSS JOIN
,or unadorned
JOIN
)is semantically the same
as listing the input relations in
FROM
,so it does not constrain the join order.
Even though most kinds of
JOIN
don’t completely constrain the join order, it is possible to instruct
the PostgreSQL query planner to treat all
JOIN
clauses as constraining the join order anyway. For
example, these three queries are logically equivalent:
SELECT
*
FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
SELECT
*
FROM a CROSS JOIN b CROSS JOIN c WHERE a.id = b.id AND b.ref = c.id;
SELECT
*
FROM a JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
But if we tell the planner to honor the
JOIN
order, the second and third take less time to plan than the
first. This effect is not worth worrying about for only three tables, but it can be a lifesaver with many
tables.
To force the planner to follow the join order laid out by explicit
JOIN
s, set the join_collapse_limit
run-time parameter to 1. (Other possible values are discussed below.)
You do not need to constrain the join order completely in order tocut search time, because it’s OK to
use
JOIN
operators withinitems of a plain
FROM
list. For example, consider:
SELECT
*
FROM a CROSS JOIN b, c, d, e WHERE ...;
398
How to add image to pdf reader - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
adding image to pdf in preview; adding a png to a pdf
How to add image to pdf reader - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
adding images to pdf forms; add signature image to pdf acrobat
Chapter 14. Performance Tips
With
join_collapse_limit
=1, this forces the planner to join A to B before joining them to other
tables, but doesn’t constrainits choices otherwise. In this example, the number of possible join orders
is reduced by a factor of 5.
Constraining the planner’s search in this way is a useful technique both for reducing planning time
and for directing the planner to a good query plan. If the planner chooses a bad join order by default,
youcan force it to choose a better order via
JOIN
syntax — assuming that you know of a better order,
that is. Experimentation is recommended.
Aclosely related issue that affects planning time is collapsing of subqueries into their parent query.
For example, consider:
SELECT
*
FROM x, y,
(SELECT
*
FROM a, b, c WHERE something) AS ss
WHERE somethingelse;
This situation might arise from use of a view that contains a join; the view’s
SELECT
rule will be
inserted in place of the view reference, yielding a query much like the above. Normally, the planner
will tryto collapse the subquery into the parent, yielding:
SELECT
*
FROM x, y, a, b, c WHERE something AND somethingelse;
This usually results in a better plan than planning the subquery separately. (For example, the outer
WHERE
conditions might be such that joining X to A first eliminates many rows of A, thus avoiding
the need to form the full logical output of the subquery.) But at the same time, we have increased the
planning time; here, wehave afive-wayjoin problem replacingtwo separate three-way joinproblems.
Because of the exponential growth of the number of possibilities, this makes a big difference. The
planner tries to avoid getting stuck in huge join search problems by not collapsing a subquery if
more than
from_collapse_limit FROM
items would result in the parent query. You can trade off
planning time against quality of plan by adjustingthis run-time parameter up or down.
from_collapse_limit and join_collapse_limit are similarly named because they do almost the
same thing: one controls when the planner will “flatten out” subqueries, and the other controls
when it will flatten out explicit joins. Typically you would either set
join_collapse_limit
equal to
from_collapse_limit
(so that explicit joins and subqueries act similarly) or set
join_collapse_limit
to 1 (if you want to control join order with explicit joins). But you might
set them differently if you are trying to fine-tune the trade-off betweenplanning time and run time.
14.4. Populating a Database
Onemightneed to insertalargeamountof data whenfirstpopulatingadatabase. This section contains
some suggestions on how to make this process as efficient as possible.
14.4.1. Disable Autocommit
When using multiple
INSERT
s, turn off autocommit and just do one commit at the end. (In plain
SQL, this means issuing
BEGIN
atthe startand
COMMIT
atthe end. Some client libraries might do this
behind your back, in which case you need to make sure the library does it when you want it done.) If
you allow each insertion to be committed separately, PostgreSQL is doing a lot of work for each row
that is added. An additional benefit of doing all insertions in one transaction is that if the insertion of
one row were to fail then the insertion of all rows inserted up to that point would be rolled back, so
you won’t be stuck with partially loaded data.
399
C# Imaging - Scan Barcode Image in C#.NET
RasterEdge Barcode Reader DLL add-in enables developers to add barcode image recognition & types, such as Code 128, EAN-13, QR Code, PDF-417, etc.
how to add image to pdf; how to add a jpeg to a pdf
XImage.Barcode Scanner for .NET, Read, Scan and Recognize barcode
VB.NET Write: Add Image to PDF; VB.NET Protect: Add Password to VB.NET Annotate: PDF Markup & Drawing. XDoc.Word for C#; XDoc.Excel for C#; XDoc.PowerPoint for
how to add an image to a pdf; add picture to pdf
Chapter 14. Performance Tips
14.4.2. Use
COPY
Use COPY toloadall the rows inone command, insteadof using a series of
INSERT
commands. The
COPY
command is optimized for loading large numbers of rows; it is less flexible than
INSERT
,but
incurs significantly less overhead for large data loads. Since
COPY
is a single command, there is no
need to disable autocommit if you use this method to populate a table.
If you cannot use
COPY
,it might help to use PREPARE to create a prepared
INSERT
statement, and
thenuse
EXECUTE
as many times as required. This avoids some of the overheadof repeatedly parsing
and planning
INSERT
.Different interfaces provide this facility in different ways; look for “prepared
statements” in the interface documentation.
Note that loading a large number of rows using
COPY
is almost always faster thanusing
INSERT
,even
if
PREPARE
is used and multiple insertions are batchedintoa single transaction.
COPY
is fastest when used within the same transaction as an earlier
CREATE TABLE
or
TRUNCATE
command. In such cases no WAL needs to be written, because in case of an error, the files contain-
ing the newly loaded data will be removed anyway. However, this consideration only applies when
wal_level is
minimal
as all commands must write WAL otherwise.
14.4.3. Remove Indexes
If youareloadinga freshly createdtable, the fastest method is to create the table, bulkloadthetable’s
data using
COPY
,then create any indexes needed for the table. Creating an index on pre-existing data
is quicker than updating it incrementally as each row is loaded.
If you are adding large amounts of data to an existing table, it might be a win to drop the indexes,
load the table, and then recreate the indexes. Of course, the database performance for other users
might suffer during the time the indexes are missing. One should also think twice before dropping a
unique index, since the error checking afforded by the unique constraint will be lost while the index
is missing.
14.4.4. Remove Foreign Key Constraints
Just as with indexes, a foreign key constraint can be checked “in bulk” more efficiently than row-by-
row. So it might be useful to drop foreign key constraints, load data, and re-create the constraints.
Again, there is a trade-off between data load speed and loss of error checking while the constraint is
missing.
What’s more, when you load data into a table with existing foreign key constraints, each new row
requires an entry in the server’s list of pending trigger events (since it is the firing of a trigger that
checks the row’s foreign key constraint). Loading many millions of rows can cause the trigger event
queue to overflow available memory, leading to intolerable swapping or even outright failure of the
command. Therefore it may be necessary, not just desirable, to drop and re-apply foreign keys when
loading large amounts of data. If temporarily removing the constraint isn’t acceptable, the only other
recourse may be to split up the load operationintosmaller transactions.
14.4.5. Increase
maintenance_work_mem
Temporarily increasing the maintenance_work_mem configuration variable when loading large
amounts of data can lead to improved performance. This will help to speed up
CREATE INDEX
400
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Get image information, such as its location, zonal information, metadata, and so on. Able to edit, add, delete, move, and output PDF document image.
add photo to pdf form; how to add image to pdf in acrobat
VB.NET PDF Password Library: add, remove, edit PDF file password
VB: Add Password to PDF with Permission Settings Applied. This VB.NET example shows how to add PDF file password with access permission setting.
add an image to a pdf acrobat; how to add image to pdf document
Chapter 14. Performance Tips
commands and
ALTER TABLE ADD FOREIGN KEY
commands. It won’t do much for
COPY
itself, so
this advice is only useful when you are using one or both of the above techniques.
14.4.6. Increase
checkpoint_segments
Temporarily increasing the checkpoint_segments configuration variable can also make large data
loads faster. This is because loading a large amount of data into PostgreSQL will cause checkpoints
to occur more often than the normal checkpoint frequency (specified by the
checkpoint_timeout
configuration variable). Whenever a checkpoint occurs, all dirty pages must be flushed to disk. By
increasing
checkpoint_segments
temporarily during bulk data loads, the number of checkpoints
that are required can be reduced.
14.4.7. Disable WAL Archival and Streaming Replication
When loading large amounts of data into an installation that uses WAL archiving or streaming repli-
cation, it might be faster to take a new base backup after the load has completed than to process
alarge amount of incremental WAL data. To prevent incremental WAL logging while loading, dis-
able archivingand streaming replication, by setting wal_level to
minimal
,archive_mode to
off
,and
max_wal_senders to zero. But note that changing these settings requires a server restart.
Aside from avoiding the time for the archiver or WAL sender to process the WAL data, doing this
will actually make certain commands faster, because they are designed not to write WAL at all if
wal_level
is
minimal
.(They can guarantee crash safety more cheaply by doing an
fsync
at the
end than by writing WAL.) This applies to the following commands:
CREATE TABLE AS SELECT
CREATE INDEX
(and variants such as
ALTER TABLE ADD PRIMARY KEY
)
ALTER TABLE SET TABLESPACE
CLUSTER
COPY FROM
,when the target table has been created or truncated earlier in the same transaction
14.4.8. Run
ANALYZE
Afterwards
Whenever you have significantly altered the distribution of data within a table, running ANALYZE
is strongly recommended. This includes bulk loading large amounts of data into the table. Running
ANALYZE
(or
VACUUM ANALYZE
)ensures that the planner has up-to-date statistics about the table.
Withno statistics or obsolete statistics, the planner might make poor decisions during queryplanning,
leading to poor performance on any tables with inaccurate or nonexistent statistics. Note that if the
autovacuum daemon is enabled, it might run
ANALYZE
automatically; see Section 23.1.3 and Section
23.1.6 for more information.
14.4.9. Some Notes About pg_dump
Dump scripts generatedby pg_dump automaticallyapply several, butnotall, of the above guidelines.
To reload a pg_dump dump as quickly as possible, you need to do a fewextra things manually. (Note
401
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
DLLs for PDF Image Extraction in VB.NET. In order to run the sample code, the following steps would be necessary. Add necessary references:
adding an image to a pdf in preview; how to add an image to a pdf in acrobat
C# PDF Password Library: add, remove, edit PDF file password in C#
C# Sample Code: Add Password to PDF with Permission Settings Applied in C#.NET. This example shows how to add PDF file password with access permission setting.
how to add image to pdf form; attach image to pdf form
Chapter 14. Performance Tips
that these points apply while restoring a dump, not while creating it. The same points apply whether
loading a text dump with psql or using pg_restore to load from a pg_dump archive file.)
By default, pg_dump uses
COPY
,and when it is generating a complete schema-and-data dump, it is
careful to load data before creating indexes and foreign keys. So in this case several guidelines are
handled automatically. What is left for you to dois to:
Set appropriate (i.e., larger than normal) values for
maintenance_work_mem
and
checkpoint_segments
.
If using WAL archiving or streaming replication, consider disabling them during the restore. To do
that, set
archive_mode
to
off
,
wal_level
to
minimal
,and
max_wal_senders
to zero before
loading the dump. Afterwards, set them back to the right values and take a fresh base backup.
Experiment withtheparalleldumpand restore modes of both pg_dump and pg_restore andfind the
optimal number of concurrent jobs to use. Dumping and restoring in parallel by means of the
-j
option should give you a significantly higher performance over the serial mode.
Consider whether the whole dump should be restored as a single transaction. To do that, pass
the
-1
or
--single-transaction
command-line option to psql or pg_restore. When using this
mode, even the smallest of errors will rollback the entire restore, possibly discarding many hours
of processing. Depending on how interrelated the data is, that might seem preferable to manual
cleanup, or not.
COPY
commands will run fastest if you use a single transaction and have WAL
archiving turned off.
If multiple CPUs are available in the database server, consider using pg_restore’s
--jobs
option.
This allows concurrent data loading and index creation.
Run
ANALYZE
afterwards.
A data-only dump will still use
COPY
, but it does not drop or recreate indexes, and it does not
normally touch foreign keys.
1
So when loading a data-only dump, it is up to you to drop
and recreate indexes and foreign keys if you wish to use those techniques. It’s still useful
to increase
checkpoint_segments
while loading the data, but don’t bother increasing
maintenance_work_mem
;rather, you’d do that while manually recreating indexes and foreign keys
afterwards. And don’t forget to
ANALYZE
when you’re done; see Section 23.1.3 and Section 23.1.6
for more information.
14.5. Non-Durable Settings
Durability is a database feature that guarantees the recording of committed transactions even if the
server crashes or loses power. However, durability adds significant database overhead, so if your site
does not require such a guarantee, PostgreSQL can be configured to run much faster. The following
areconfiguration changes you can make toimproveperformanceinsuchcases. Except asnoted below,
durability is still guaranteed in case of a crashof the database software; only abrupt operating system
stoppage creates a risk of data loss or corruptionwhen these settings are used.
Place the database cluster’s data directory in a memory-backed file system (i.e. RAM disk). This
eliminates all database disk I/O, but limits data storage to the amount of available memory (and
1. You can get the effect of disabling foreign keys by using the
--disable-triggers
option — but realize that that
eliminates, rather than just postpones, foreign key validation, andso it is possible to insert bad data if you use it.
402
C# PDF Sticky Note Library: add, delete, update PDF note in C#.net
Evaluation library and components enable users to annotate PDF without adobe PDF reader control installed. Able to add notes to PDF using C# source code in
how to add a photo to a pdf document; how to add a jpeg to a pdf file
C# Create PDF from images Library to convert Jpeg, png images to
List<Bitmap> images = new List<Bitmap>(); images.Add(new Bitmap(Program.RootPath + "\\" 1.gif")); / Build a PDF document with GIF image.
add picture to pdf reader; pdf insert image
Chapter 14. Performance Tips
perhaps swap).
Turn off fsync; there is no need to flush data todisk.
Turn off synchronous_commit; there might be no need to force WAL writes to disk on every com-
mit. This setting does risk transaction loss (though not data corruption) in case of a crash of the
database.
Turn off full_page_writes; there is no need to guard against partial page writes.
Increase checkpoint_segments and checkpoint_timeout; this reduces the frequencyof checkpoints,
but increases the storage requirements of
/pg_xlog
.
Create unlogged tables to avoid WAL writes, though it makes the tables non-crash-safe.
403
III. Server Administration
This part covers topics that are of interest to a PostgreSQL database administrator. This includes
installationof the software, set upand configurationof the server, managementof users anddatabases,
and maintenance tasks. Anyone who runs a PostgreSQL server, even for personal use, but especially
in production, should be familiar with the topics covered in this part.
The information in this part is arranged approximately in the order in which a new user should read
it. But the chapters are self-containedand can be read individuallyas desired. The informationin this
part is presented in a narrative fashion in topical units. Readers looking for a complete description of
aparticular command should see Part VI.
The first few chapters are written so they can be understood without prerequisite knowledge, so new
userswhoneed to setuptheir ownserver canbegintheir explorationwiththis part. Therestof thispart
is about tuning and management; thatmaterial assumes thatthereader is familiar with the generaluse
of the PostgreSQL database system. Readers are encouragedto lookat Part I and Part II for additional
information.
Chapter 15. Installation from Source Code
This chapter describes the installation of PostgreSQL using the source code distribution. (If you are
installing a pre-packaged distribution, such as an RPM or Debian package, ignore this chapter and
read the packager’s instructions instead.)
15.1. Short Version
./configure
make
su
make install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
The long version is the rest of this chapter.
15.2. Requirements
In general, a modern Unix-compatible platform should be able to run PostgreSQL. The platforms
that had received specific testing at the time of release are listed in Section 15.6 below. In the
doc
subdirectory of the distribution there are several platform-specific FAQdocuments you mightwish to
consult if you are having trouble.
The following software packages are required for building PostgreSQL:
GNU make version 3.80 or newer is required; other make programs or older GNU make versions
will not work. (GNU make is sometimes installed under the name
gmake
.) To test for GNU make
enter:
make --version
You need an ISO/ANSI C compiler (at least C89-compliant). Recent versions of GCC are rec-
ommended, but PostgreSQL is known to build using a wide variety of compilers from different
vendors.
tar is required to unpack the source distribution, in addition toeither gzip or bzip2.
The GNU Readline library is used by default. It allows psql (the PostgreSQL command line
SQL interpreter) to remember each command you type, and allows you to use arrow keys to re-
call and edit previous commands. This is very helpful and is strongly recommended. If you don’t
want to use it then you must specify the
--without-readline
option to
configure
.As an al-
ternative, you can often use the BSD-licensed
libedit
library, originally developed on NetBSD.
The
libedit
library is GNU Readline-compatible and is used if
libreadline
is not found, or
406
Chapter 15. Installation from Source Code
if
--with-libedit-preferred
is used as an optionto
configure
.If youare using a package-
based Linux distribution, be aware that you need both the
readline
and
readline-devel
pack-
ages, if those are separate in your distribution.
The zlib compression library is used by default. If you don’t want to use it then you must specify
the
--without-zlib
option to
configure
.Using this option disables support for compressed
archives in pg_dump and pg_restore.
The following packages are optional. They are not required in the default configuration, but they are
needed when certain build options are enabled, as explained below:
To build the server programming language PL/Perl you need a full Perl installation, including the
libperl
library and the header files. Since PL/Perl will be a shared library, the
libperl
library
must be a shared library also on most platforms. This appears to be the default in recent Perl
versions, but it was not in earlier versions, and in any case it is the choice of whomever installed
Perl at your site. If you intend to make more than incidental use of PL/Perl, youshould ensure that
the Perl installation was built with the
usemultiplicity
option enabled (
perl -V
will show
whether this is the case).
If you don’t have the shared library but you need one, a message like this will appear during the
PostgreSQL build to point out this fact:
***
Cannot build PL/Perl because libperl is not a shared library.
***
You might have to rebuild your Perl installation.
Refer to
***
the documentation for details.
(If you don’t follow the on-screen output you will merely notice that the PL/Perl library object,
plperl.so
or similar, will not be installed.) If you see this, you will have to rebuild and install
Perl manually to be able to build PL/Perl. During the configuration process for Perl, request a
shared library.
To build the PL/Python server programming language, you need a Python installation with the
header files and the distutils module. The minimum required version is Python 2.3. (To work with
function arguments of type
numeric
, a 2.3.x installation must include the separately-available
cdecimal
module; note the PL/Python regression tests will not pass if that is missing.) Python 3
is supported if it’s version 3.1 or later; but see Section 43.1 when using Python 3.
Since PL/Python will be a shared library, the
libpython
library must be a shared library also on
most platforms. This is not the case in a default Python installation. If after building and installing
PostgreSQL you have a file called
plpython.so
(possibly a different extension), then everything
went well. Otherwise you should have seen a notice like this flying by:
***
Cannot build PL/Python because libpython is not a shared library.
***
You might have to rebuild your Python installation.
Refer to
***
the documentation for details.
That means you have to rebuild (part of) your Python installation to create this shared library.
If you have problems, run Python 2.3 or later’s configure using the
--enable-shared
flag. On
some operating systems you don’t have to build a shared library, but you will have to convince the
PostgreSQL build system of this. Consult the
Makefile
in the
src/pl/plpython
directory for
details.
To build the PL/Tcl procedural language, you of course need a Tcl installation. If you are using a
pre-8.4 release of Tcl, ensure that it was built without multithreading support.
To enable Native Language Support (NLS), that is, the ability to display a program’s messages in
alanguage other than English, you need an implementation of the Gettext API. Some operating
systems have this built-in (e.g., Linux, NetBSD, Solaris), for other systems you can download an
407
Documents you may be interested
Documents you may be interested