cfqueryparam конвертирует varchar в nvarchar в sql azure

Я использую базу данных в Azure с ColdFusion 2016. Я использую Sqljdbc41.jar из (полезные ссылки по настройке: ссылка1 ссылка2) Это мой запрос . [uuid] имеет индекс и является varchar(36), а pkIdentity является первичным ключом int.

select pkIdentity
from tbl1
where [uuid] = <cfqueryparam cfsqltype="cf_sql_varchar" value="#attributes.uuid#" maxlength="36">

Этот запрос потребляет больше всего DTU в Azure. Coldfusion отправляет его в Azure как

(@P0 nvarchar(4000))select pkIdentity
from tbl1
where [uuid]= @P0

Я читал, что настройка драйвера jdbc может быть приведением типа данных varchar к типу varchar при передаче его в Azure SQL. Однако на экране настройки базы данных CF у меня нет возможности отключить преобразование в nvarchar.

Я думаю, это мои варианты. Как вы думаете, что лучше?

  1. попробуйте перепроектировать, что делает coldfusion, когда вы используете cfqueryparam, но укажите правильный тип данных (используйте sp_prepexec?)
  2. полностью удалить использование cfqueryparam и просто проверить, что строка является допустимой uuid, прежде чем жестко кодировать ее в запросе (например, где [uuid] = '#attributes.uuid#'), но тогда я боюсь, что потеряю видимость для всех выполнений этого запроса группируется в инструменте Azure SQL Performance Insight

person jessieloo    schedule 31.08.2017    source источник
comment
Как вы установили свое утверждение о том, как ColdFusion отправляет параметр?   -  person Dan Bracuk    schedule 31.08.2017
comment
из этого ответа - заголовок stackoverflow.com/questions/10802388/   -  person jessieloo    schedule 31.08.2017
comment
Считаете ли вы, что преобразование в nvarchar замедляет выполнение запроса? jochenhebbrecht.be/site/2014-05-01/java/ jdbc:sqlserver://localhost\SQLEXPRESS;DatabaseName=TESTDB;sendStringParametersAsUnicode=false   -  person Bernhard Döbler    schedule 31.08.2017
comment
Вам не нужно полагаться исключительно на упомянутое вами средство анализа производительности SQL Azure. У вас есть возможность использовать хранилище запросов docs.microsoft.com/en-us/sql/relational-databases/performance/   -  person Alberto Morillo    schedule 31.08.2017
comment
Если проблема связана с какой-то настройкой, я предлагаю приложить больше усилий, чтобы изменить эту настройку.   -  person Dan Bracuk    schedule 31.08.2017
comment
Склоняясь к ответу @DanBracuk, я бы также отказался от JAR-файла SQL JDBC, который вы используете, в пользу собственных драйверов SQL Server, которые поставляются с CF2016. Мой предыдущий работодатель перешел с CF 8 на 9 в 2016 году за последние 8 лет. Мы убрали этот JAR-файл при преобразовании в CF 9. Пришлось внести некоторые изменения в код, чтобы учесть, как обрабатывались некоторые вещи в то время, но это изменение было необходимо для повышения производительности и стабильности.   -  person Adrian J. Moreno    schedule 02.09.2017


Ответы (1)


Большое спасибо @BernhardDöbler за комментарий с параметром, который мне нужен, чтобы исправить проблему источника данных, который всегда приводит параметры в Unicode. Параметр, который необходимо добавить в URL-адрес JDBC, — это sendStringParametersAsUnicode=false (по иронии судьбы я сначала скопировал его из его комментария и добавил в настройку, но это не сработало, потому что между парой букв были вставлены какие-то странные символы.) Изменение потребления DTU теперь значительно ниже! Смотрите скриншоты ниже. Потребление DTU Оценка производительности

person jessieloo    schedule 05.09.2017