медленное подключение к базе данных Pervasive

Это была постоянная проблема на моем рабочем месте. Ранее у нас был студент-программист, который написал нам несколько приложений с использованием C#, которые хорошо работали на его ноутбуке, но как только приложения были запущены для использования на разных компьютерах, соединение с распространенной базой данных стало мучительно медленным.

Теперь я пишу простое приложение VB.net, которое должно запрашивать базу данных Pervasive, и я сталкиваюсь с той же проблемой.

вот мой код:

 'PSQL variables
        Dim myPsqlConnection As PsqlConnection = New PsqlConnection("ServerName=FILESERVER;ServerDSN=SAGE2")
        Dim queryString As String
        queryString = "SELECT NAME FROM CUSTOMER"
        Dim MyCommand As New PsqlCommand(queryString, myPsqlConnection)
        Dim MyReader As PsqlDataReader
        Dim tempCustname As String


        Try 'open conncetion to Pervasive DB
            myPsqlConnection.Open()
        Catch ex As Exception
            MsgBox("COULD NOT OPEN A CONNECTION TO THE DATABASE" & vbCrLf & ex.Message)
            Exit Sub
        End Try

        Try 'execute Pervasive query
            MyReader = MyCommand.ExecuteReader
        Catch ex As Exception
            MsgBox("QUERY ERROR" & vbCrLf & ex.Message)
            Exit Sub
        End Try
        If MyReader.HasRows = False Then
            MsgBox("NO RESULTS FOUND")
            Exit Sub
        End If
        While (MyReader.Read)
            tempCustname = MyReader("NAME").ToString()
            Customers.Items.Add(tempCustname)
        End While
        MyReader.Close()
        myPsqlConnection.Close()

Я прошел через программу, и мне потребовалось около 30 секунд, чтобы пройти строку, где она открывает соединение.

Что касается характеристик (я сделаю все возможное):

Мой компьютер довольно мощный (16 ГБ или ОЗУ, 6-ядерный процессор AMD с тактовой частотой 3,0 ГГц на ядро, Windows 7 Home, 64-разрядная версия)

Pervasive.Data.SqlClient версии 3.2

Компиляция с помощью Microsoft Visual Basic 2010 Express

В этой сети очень мало компьютеров (около 7), и у меня нет таких проблем с базами данных MS Access. Наш сервер новый 2 года назад, и наша сеть была обновлена ​​до соединения GB. Должен отметить, что я очень мало знаю о базах данных в целом, не говоря уже о подключении к VB. Я не самый лучший человек для этого, но я все еще самый квалифицированный человек в нашей маленькой компании.


person user3479671    schedule 06.01.2015    source источник
comment
Пробовали ли вы инструменты PSQL, такие как Function Executor или Pervasive Control Center (PCC). Открывать файлы/таблицы, читать записи/выполнять запросы SELECT. У них все еще есть медленная производительность?   -  person zaggler    schedule 06.01.2015
comment
Я пытаюсь понять, как это сделать прямо сейчас   -  person user3479671    schedule 06.01.2015
comment
Насколько я могу судить, у меня нет доступа к базе данных через центр управления Pervasive. Я могу запросить базу данных через Excel через DSN, и это почти мгновенно   -  person user3479671    schedule 06.01.2015
comment
нет идей? Или это слишком двусмысленно?   -  person user3479671    schedule 06.01.2015
comment
Вы используете один и тот же DSN из Excel и программы VB?   -  person mirtheil    schedule 06.01.2015
comment
Прошли годы с тех пор, как я работал с Pervasive и никогда через ADO.NET, но я думаю, что если вы можете получить к нему доступ через поставщика Pervasive ADO.NET, это означает, что вы устанавливаете прямое соединение (не через OLEDB) и поэтому он также должен иметь возможность подключаться к нему через Pervasive Control Center. Если вы не можете, то в этом может заключаться ваша проблема, и я бы сосредоточился на ее решении, прежде чем идти дальше. Выясните, как получить соединение с помощью инструментов pervasive, прежде чем пытаться выяснить, как подключиться к нему через ADO.NET.   -  person Steven Doggart    schedule 06.01.2015
comment
@ mirtheil: я использую тот же DNS, когда я подключаюсь из Excel @ Стивен Доггарт: Спасибо за вклад, но я понятия не имею, что с этим делать. Я не знаю, с чего начать решение проблемы с центром управления, и понятия не имею, что такое ADO или OLEDB.   -  person user3479671    schedule 06.01.2015
comment
ADO и OLEDB — это фреймворки в Windows, которые обеспечивают взаимозаменяемость многих различных типов источников данных, поэтому, например, теоретически, если вы получаете доступ к своему источнику данных через ADO, вам не нужно заботиться о том, является ли ваш источник данных SQL. Server, Oracle, Access (Jet) или даже XML-файл. Пока вы обращаетесь к нему через ADO, весь код будет написан одинаково, независимо от целевого типа источника данных. Конечно, это только теория. На самом деле это не совсем взаимозаменяемо. В любом случае ADO.NET — это управляемая библиотека .NET для доступа к источникам данных, совместимым с ADO.   -  person Steven Doggart    schedule 06.01.2015
comment
Вы уверены в DNS? Используемая вами строка подключения: ServerName=FILESERVER;ServerDSN=SAGE2, которая будет обращаться к DSN Pervasive Engine с именем SAGE2 на компьютере с именем FILESERVER. Вы запускаете все это локально или по сети? Что произойдет, если вы измените имя сервера строки подключения с FILESERVER на фактический IP-адрес? Какие свойства DSN использует Excel?   -  person mirtheil    schedule 06.01.2015
comment
ADO.NET в основном поддерживает подключаемые модули, поэтому сторонние поставщики могут предоставлять доступ к своим собственным базам данных через библиотеку ADO .NET. Эти подключаемые модули ADO называются поставщиками ADO.NET. PsqlConnection — это начальный класс для поставщика Pervasive. Таким образом, когда вы используете класс PsqlConnection, это означает, что вы используете управляемую библиотеку поставщика .NET Pervasive для доступа к базе данных Pervasive через ADO. OLEDB аналогичен, но это более старая технология, которая по-прежнему поддерживается в ADO.NET с использованием класса OleDbConnection. Это не так эффективно, как ADO, который представляет собой прямое соединение.   -  person Steven Doggart    schedule 06.01.2015
comment
Хорошо, каким-то чудом случайного ковыряния мне удалось получить доступ к базе данных через центр управления. Так что теперь я ухожу в Google, как использовать эту штуку ADO   -  person user3479671    schedule 06.01.2015
comment
@mirtheil Ааа, хорошо, я не очень знаком со строками подключения Pervasive. Значит ли это, что провайдер Pervasive устанавливает базовое соединение OLEDB, если вы укажете DSN? Это как-то так звучит.   -  person Steven Doggart    schedule 06.01.2015
comment
Или, скорее, я должен сказать ODBC, чтобы не запутать еще больше....   -  person Steven Doggart    schedule 06.01.2015
comment
@ Стивен, нет, поставщик Pervasive ADO.NET напрямую подключается к механизму Pervasive. Он не проходит через ODBC или OLEDB на стороне клиента. Провайдер ADO.NET, соединение OLEDB и соединение ODBC выполняют одни и те же вызовы в механизме. В строке подключения не нужно указывать DSN. Он может указывать имя базы данных или имя DSN.   -  person mirtheil    schedule 06.01.2015
comment
@mirtheil Итак, когда вы указываете DSN в строке подключения, это DSN, определенный на сервере, а не на клиенте? Я предполагаю, что это будет немного менее эффективно, верно, поскольку ему потребуется доступ к DSN через ODBC, чтобы разрешить фактическое имя базы данных перед выполнением прямого подключения? Не то чтобы я ожидал 30-секундного замедления только от этого...   -  person Steven Doggart    schedule 06.01.2015
comment
Я изменил строку подключения на Server Name=FILESERVER;Database Name=Dbname;User ID=myid;Password=pass; (в общем) и это работает, но не быстрее   -  person user3479671    schedule 06.01.2015
comment
И так ли медленно при подключении через центр управления?   -  person Steven Doggart    schedule 06.01.2015
comment
На самом деле, нет. Центр управления практически мгновенный, тогда как в VB он по-прежнему занимает около 30 секунд. Я только изменил строку подключения, больше ничего. Должен ли я использовать другого поставщика или импортировать что-то еще?   -  person user3479671    schedule 06.01.2015
comment
Интересно. Нет, я не думаю, что вы делаете что-то неправильно (хотя я бы рекомендовал использовать несколько блоков Using, но это относительно незначительно и не имеет ничего общего с производительностью). Могут быть некоторые параметры, которые вы можете добавить в строку подключения, которые могут изменить производительность, но я не уверен, что они будут.   -  person Steven Doggart    schedule 06.01.2015
comment
Еще какое-то необычное поведение. Если я не запускаю его в течение минуты или около того, то для повторного подключения требуется добрых 30 секунд. Но последующие соединения в течение короткого промежутка времени происходят мгновенно. я не понимаю   -  person user3479671    schedule 06.01.2015
comment
И вы не замечаете такого же поведения с центром управления?   -  person Steven Doggart    schedule 06.01.2015
comment
странно, нет. Кажется, он отлично реагирует   -  person user3479671    schedule 06.01.2015
comment
Попробуйте отключить пул подключений и IPv6 в строке подключения. Добавьте в строку подключения следующее: EnableIPV6=False;Pooling=False;. Кроме того, это веб-приложение или приложение для Windows?   -  person mirtheil    schedule 06.01.2015
comment
Это приложение для Windows. Enable IPV6=False, кажется, разрывает строку подключения, а Pooling=False, похоже, не имеет значения.   -  person user3479671    schedule 06.01.2015


Ответы (1)


У меня это работает сейчас. Решение состояло в том, чтобы сначала установить базу данных во всеобъемлющем центре управления. Сначала выберите «новая база данных» в главном окне PCC и введите имя базы данных, местоположение, имя пользователя и пароль.

Затем я изменил соединение с повсеместного ADO на OLEDB. Моя строка подключения теперь выглядит так:

Dim myPsqlConnection As OleDbConnection = New OleDbConnection("Provider=PervasiveOLEDB;Data Source=DatabaseName;Location=FILESERVER")

Всем спасибо за помощь!

person user3479671    schedule 14.01.2015