Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » Einführung in die Programmierung mit SQL Anywhere » SQL in Anwendungen verwenden » SQL Anywhere-Cursor » Cursor-Empfindlichkeit und Performance

 

Prefetch von Zeilen

Prefetch-Vorgänge und Mehrzeilen-Fetch-Vorgänge unterscheiden sich voneinander. Prefetch-Vorgänge können ohne explizite Anweisungen aus der Clientanwendung ausgeführt werden. Prefetch-Vorgänge rufen Zeilen aus dem Server in einen Puffer auf dem Client ab, machen diese Zeilen aber für die Clientanwendung erst verfügbar, wenn die entsprechende Zeile von der Anwendung abgerufen wird.

Standardmäßig führt die Clientbibliothek von SQL Anywhere Prefetch-Vorgänge für mehrere Zeilen aus, wenn eine Anwendung eine einzelne Zeile abruft. Die Clientbibliothek von SQL Anywhere speichert die zusätzlichen Zeilen in einem Puffer.

Prefetch-Vorgänge verbessern die Performance durch die Reduktion des Client/Server-Roundtrips und erhöhen den Durchsatz, indem ohne separate Anforderung für einzelne Zeilen oder Zeilenblöcke viele Zeilen verfügbar gemacht werden.

Weitere Hinweise zur Steuerung der Prefetch-Funktionen finden Sie unter prefetch-Option [Datenbank].

Prefetch-Funktionen aus einer Anwendung steuern
  • Die Prefetch-Option steuert, ob Prefetch-Vorgänge durchgeführt werden. Sie können die Prefetch-Option für eine einzelne Verbindung auf "Immer", "Bedingt" oder "Aus" setzen. Standardmäßig ist sie auf "Bedingt" gesetzt.

  • In Embedded SQL können Sie die PREFETCH-Vorgänge auf Cursorbasis steuern, wenn Sie einen Cursor bei einem FETCH-Vorgang öffnen, indem Sie die BLOCK-Klausel verwenden.

    Die Anwendung kann eine maximale Anzahl von Zeilen festlegen, die in einem einzelnen FETCH-Vorgang vom Server enthalten sein dürfen, indem die BLOCK-Klausel angegeben wird. Beispiel: Wenn Sie 5 Zeilen gleichzeitig abrufen und anzeigen, können Sie BLOCK 5 verwenden. Wenn Sie BLOCK 0 festlegen, wird jeweils 1 Datensatz abgerufen, und ein FETCH RELATIVE 0 ruft die Zeile nochmals vom Server ab.

    Obwohl Sie die PREFETCH-Vorgänge auch durch einen Verbindungsparameter für die Anwendung ausschalten können, ist es effektiver, BLOCK 0 zu verwenden, als die Prefetch-Option auf Off zu setzen. Weitere Hinweise finden Sie unter prefetch-Option [Datenbank].

  • Prefetch-Vorgänge für wertsensitive Cursortypen sind standardmäßig deaktiviert.

  • In Open Client können Sie das PREFETCH-Verhalten mit ct_cursor und CS_CURSOR_ROWS nach der Deklaration, aber vor dem Öffnen des Cursors steuern.

Der Prefetch erhöht in Fällen, die wahrscheinlich zu einer Performancesteigerung führen, die Anzahl der Prefetch-Zeilen dynamisch. Dies umfasst Cursor, die den folgenden Bedingungen entsprechen:

  • Sie verwenden einen der unterstützten Cursortypen:

    • ODBC und OLE DB   FORWARD-ONLY- und READ-ONLY-Cursor (Standard)

    • Embedded SQL   DYNAMIC SCROLL- (Standard), NO SCROLL- und INSENSITIVE-Cursor

    • ADO.NET   Alle Cursor

  • Sie führen nur FETCH NEXT-Vorgänge aus (keine absoluten, relativen oder Rückwärts-Fetch-Vorgänge).

  • Die Anwendung ändert den Typ der Hostvariablen zwischen Fetch-Vorgängen nicht und verwendet keine GET DATA-Anweisung, um Spaltendaten in Blöcken abzufragen (die Verwendung einer GET DATA-Anweisung zum Abrufen des Werts wird unterstützt).