Coldfusion10で再現可能なCFQUERYPARAMのパフォーマンスの問題

ラスピン

私は、Coldfusion10がSQLServer 2008 R2にクエリを実行することで、パラメーター化のパフォーマンスに関する深刻な問題を一貫して再現することができました。他の人が何を得るのか知りたいと思います。コードは以下のとおりです。

テストは何をしますか?100行のテーブルを作成します。データ列は、1つを除いてすべて空白です。次に、Coldfusionクエリを10回実行し、半分はcfqueryparamを使用し、半分は単純な文字列を使用します。それぞれの応答時間のリストを返します。これを実行すると、最初の呼び出しとは別に、パラメーター化されたクエリの実行速度がはるかに遅くなります(約10〜100倍)。

SQL Serverで何が起こっているのですか?SQLサーバーに違いは見られません。どちらの場合も、プランキャッシュは実質的に同一のプランを示し(一方は明らかにパラメーター化されています)、プロファイラーは両方に対して高速な応答を示します。ただし、Coldfusionはパラメータ化されたクエリに苦労しています。

何が問題を修正しますか?不思議なことに、varcharをnvarcharに変更すると、問題は解決します。または、空白以外を先頭に移動すると、両方の応答が遅くなります(図を参照)。すべてのレコードを空白または非空白にすると、問題は発生しません。それはミックスでなければなりません。CF9で問題を再現できませんが、CF11を試していません。

<cfset datasource="yourdatasource" />
<cfquery name="createdata" datasource="#datasource#">
    --EMPTY PREVIOUS TESTS
    IF OBJECT_ID('aaatest', 'U') IS NOT NULL
    BEGIN
        TRUNCATE TABLE aaatest;
        DROP TABLE aaatest;
    END

    --CREATE TABLE TO CONTAIN DATA
    CREATE TABLE [dbo].[aaatest](
        [id] [int] NOT NULL,
        [somedata] [varchar](max) NULL,
        [somekey] [int] NOT NULL
    ) ON [PRIMARY];

    --INSERT 100 ROWS WITH 99 BLANK AND 1 NON-BLANK
    WITH datatable AS (
        SELECT 1 id
        UNION all
        SELECT id + 1
        FROM    datatable   
        WHERE   id + 1 <= 100
    )
    INSERT INTO aaatest(id,somekey,somedata)
    SELECT id,1,case when id=99 then 'A' else '' end
    FROM datatable;
</cfquery>

<cfset results=[] />
<cfloop from="1" to="10" index="n">
    <!--- use parameters for every other test --->
    <cfset useParameters = (n mod 2 is 0) />
    <cfquery name="myquery" datasource="#datasource#" result="result">
        SELECT  somedata 
        FROM    aaatest
        WHERE  somekey=
        <cfif useParameters>
            <cfqueryparam value="1" CFSQLType="CF_SQL_INTEGER" />
        <cfelse>
            1
        </cfif>
    </cfquery>
    <!--- store results with parameter test marked with a P --->
    <cfset arrayAppend(results,(useParameters?'P':'')&result.executiontime) />
</cfloop>

<cfdump var="#results#" />
ロバート・ポールセン

回答-コメントの@Raspinで確認されているように、設定NOCOUNT ONすると問題が修正されます。

元の提案:

これが手がかりかもしれません。あなたはINDEXを扱っていませんが、私の考えでは、SQLはデータ変換を行う必要があります。行数が少ないと問題になるとは思いませんが、この問題が発生するとは思いません。

ハッシュを含むインデックス付き列でのcfqueryparam検索を使用した低速クエリ

cfqueryparamがvarcharsをUnicodeとして送信するかどうかに関係なく、ColdFusion管理者に設定がある可能性があります。その設定が列の設定と一致しない場合(この場合、その設定が有効になっている場合)、MSSQLはそのインデックスを使用しません。

私が試してみることをお勧めするもう1つのことSELECTは、IFステートメント全体をステートメントでラップすることです。私の考えでは、SQLがクエリプランを再利用できるとは思わないような形で出くわしたのかもしれません。つまり、パフォーマンスの低下は実際には再コンパイルです。

<cfloop from="1" to="10" index="n">
    <cfset useParameters = (n mod 2 is 0) />
    <cfif useParameters>
        <cfquery name="myquery" datasource="#datasource#" result="result">
        SELECT  somedata
        FROM    aaatest
        WHERE  somekey= <cfqueryparam value="1" CFSQLType="CF_SQL_INTEGER" />
        </cfquery>
    <cfelse>
        <cfquery name="myquery" datasource="#datasource#" result="result">
        SELECT  somedata
        FROM    aaatest
        WHERE  somekey= 1
        </cfquery>
    </cfif>

    <cfset arrayAppend(results,(useParameters?'P':'')&result.executiontime) />
</cfloop>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

選択可能なRecyclerViewのパフォーマンスの問題

分類Dev

再帰クエリのパフォーマンスの問題

分類Dev

再帰的なORMクラスでのSpringリポジトリのパフォーマンスの問題

分類Dev

正規表現のパフォーマンスの問題

分類Dev

IIS 10Expressのパフォーマンスの問題

分類Dev

パフォーマンスの問題

分類Dev

PageStorageKeyでのFlutterListViewのパフォーマンスの問題

分類Dev

VirtualBoxでのLinuxMintのパフォーマンスの問題

分類Dev

SQLでのUNION句のパフォーマンスの問題

分類Dev

Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

分類Dev

HikariCP での Postgresql のパフォーマンスの問題

分類Dev

yaml-cppの主なパフォーマンスの問題

分類Dev

DataReaderのパフォーマンスの問題、奇妙な動作

分類Dev

奇妙なKinecticjsのパフォーマンスの問題

分類Dev

Springの@Autowiredは大きなパフォーマンスの問題ですか?

分類Dev

単純なクエリでのパフォーマンスの問題

分類Dev

UICollectionビューのスクロール可能な年ビュー:パフォーマンスの問題

分類Dev

Retina Macbook ProでのWebGLパフォーマンスの問題

分類Dev

LinkedBlockingQueueでのJavaパフォーマンスの問題

分類Dev

Alfresco SearchServicesでの検索パフォーマンスの問題

分類Dev

mysql8.0でのselectパフォーマンスの問題

分類Dev

Retina(MacBook)でのUnityWebGLパフォーマンスの問題

分類Dev

予期しないパフォーマンスの問題

分類Dev

ColdFusion10のApachePOIバージョン

分類Dev

パフォーマンスの問題、何が原因ですか?

分類Dev

Windows10で起動可能なUSBペンドライブをフォーマットする際の問題

分類Dev

Azureクエリで発生する可能性のあるパフォーマンスの問題

分類Dev

私の頭の中でMySQLのパフォーマンスの問題

分類Dev

C ++での大きなCSVファイルのパフォーマンスの問題を読み込む

Related 関連記事

  1. 1

    選択可能なRecyclerViewのパフォーマンスの問題

  2. 2

    再帰クエリのパフォーマンスの問題

  3. 3

    再帰的なORMクラスでのSpringリポジトリのパフォーマンスの問題

  4. 4

    正規表現のパフォーマンスの問題

  5. 5

    IIS 10Expressのパフォーマンスの問題

  6. 6

    パフォーマンスの問題

  7. 7

    PageStorageKeyでのFlutterListViewのパフォーマンスの問題

  8. 8

    VirtualBoxでのLinuxMintのパフォーマンスの問題

  9. 9

    SQLでのUNION句のパフォーマンスの問題

  10. 10

    Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

  11. 11

    HikariCP での Postgresql のパフォーマンスの問題

  12. 12

    yaml-cppの主なパフォーマンスの問題

  13. 13

    DataReaderのパフォーマンスの問題、奇妙な動作

  14. 14

    奇妙なKinecticjsのパフォーマンスの問題

  15. 15

    Springの@Autowiredは大きなパフォーマンスの問題ですか?

  16. 16

    単純なクエリでのパフォーマンスの問題

  17. 17

    UICollectionビューのスクロール可能な年ビュー:パフォーマンスの問題

  18. 18

    Retina Macbook ProでのWebGLパフォーマンスの問題

  19. 19

    LinkedBlockingQueueでのJavaパフォーマンスの問題

  20. 20

    Alfresco SearchServicesでの検索パフォーマンスの問題

  21. 21

    mysql8.0でのselectパフォーマンスの問題

  22. 22

    Retina(MacBook)でのUnityWebGLパフォーマンスの問題

  23. 23

    予期しないパフォーマンスの問題

  24. 24

    ColdFusion10のApachePOIバージョン

  25. 25

    パフォーマンスの問題、何が原因ですか?

  26. 26

    Windows10で起動可能なUSBペンドライブをフォーマットする際の問題

  27. 27

    Azureクエリで発生する可能性のあるパフォーマンスの問題

  28. 28

    私の頭の中でMySQLのパフォーマンスの問題

  29. 29

    C ++での大きなCSVファイルのパフォーマンスの問題を読み込む

ホットタグ

アーカイブ