Добрый день!



Данные:

клиент версии 3.3.2.275

база ms sql 2005



Задачи

1. Удалить все письма (всех пользователей) из БД.

2. Удалить логи.

3. Уменьшить размер БД другими способами – если есть какой-то способ (кроме шринка).



По первой задаче - В тестовой базе скл запросом удалили данные в таблицах dbo.tbl_MailMessage, dbo.tbl_MailMessageLog, dbo.tbl_MailMessageRight – но на сколько это правильно вопрос…

По второй задаче - если поступить также скл запросом - вопрос какие таблицы чистить?





Есть варианты правильного решения указанных задач (может штатные средства террасофт)?

Нравится

5 комментариев
Лучший ответ

Насколько я помню, то готовых утилит для очистки писем и логов в 3-ке не было. Решение только написание своих скриптов.

Чтобы понять в какой таблице хранятся логи, запустите sql-профайлер, перейдите на вкладку с логами в 3-ке и посмотрите в sql-профайлере, в какую таблицу пойдет запрос.

Ещё для уменьшения размера БД можно очистить таблицу процессов и их элементов (если процессы использовались).

Также можно посмотреть, что содержится в таблице История и удалить лишнее.

В любом случае нужно понимать, что, если с базой данных активно работают пользователи, то её размер будет расти.

Насколько я помню, то готовых утилит для очистки писем и логов в 3-ке не было. Решение только написание своих скриптов.

Чтобы понять в какой таблице хранятся логи, запустите sql-профайлер, перейдите на вкладку с логами в 3-ке и посмотрите в sql-профайлере, в какую таблицу пойдет запрос.

Ещё для уменьшения размера БД можно очистить таблицу процессов и их элементов (если процессы использовались).

Также можно посмотреть, что содержится в таблице История и удалить лишнее.

В любом случае нужно понимать, что, если с базой данных активно работают пользователи, то её размер будет расти.

При удалении записей таблицу прав отдельно чистить не нужно, там каскадная связь и записи о правах удалятся вслед за записями основной таблицы сами.

Логи в других разделах устроены аналогично, плюс tbl_DatabaseLog для записей самого раздела логов.

Кроме почты и логов, много места могут занимать таблицы файлов каждого раздела.

Вообще, для быстрого поиска, куда делось место, можно воспользоваться стандартным отчётом «Disk Usage by Top Tables» в Management Studio:

 

Алла Савельева 

 Спасибо,   sql-профайлер посмотрю 

Зверев Александр пишет:

При удалении записей таблицу прав отдельно чистить не нужно, там каскадная связь и записи о правах удалятся вслед за записями основной таблицы сами.

Т.е.  если SQL запросом удаляю только dbo.tbl_MailMessage,  то dbo.tbl_MailMessageRight очистится сама?

Не понимаю как это работает... на уровне запуска клиента под супервизором запускается какой-то скрипт?



«Disk Usage by Top Tables»  так и нашел dbo.tbl_MailMessage

В TSAdmin у связи в таблице прав стоит галка «каскадная связь». На уровне базы удаление в связанных таблицах работает при помощи триггера tr_tbl_MailMessage_ID и аналогичных для каждого раздела.

Зверев Александр,

Ясно , спасибо

Показать все комментарии

Коллеги, на одном из проектов столкнулась со следующей проблемой.
Нам необходимо было реализовать заполнение заказа на сайте (Joomla, Php 5.3, хостинг на линукс) с последующим просмотром всех текущих заказов клиента.

На этапе настройки подключения к базе MS SQL 2005 возникли проблемы. Написан скрипт для теста подключения к MS SQL 2005 с сайта. Он говорит, что подключения к базе нет.
При этом, удаленный доступ к серверу через Интернет есть (статический IP), со своего рабочего места к MS SQL клиента через свое приложение подключиться могу.

Хостер установил какое-то дополнение для связки с SQL, но оно не помогло. Со слов хостера подключение самим хостером не блокируется.

Нам предложили вариант с установкой библиотеки http://www.freetds.org/ на линукс-хостинге, но хостер отказывается ее устанавливать.

Возможно, кто-то уже сталкивался с таким вопросом. Как Вы его решали?
Есть ли какие-то другие пути?

Нравится

4 комментария

Сталкивался, установка freetds помогла. Искал другие пути но так и не нашел, Хотя есть если я не ошибаюсь pdo_mssql но вот работает ли он без freetds не могу сказать.

pdo_mssql у меня заработал только на windows......

"Шамуилов Александр" написал:

pdo_mssql у меня заработал только на windows......


После долгих мучений на линукс серваке удалось запустить pdo на нем, но не помню использовался в этом процессе freetds или нет. Скорее всего да.

Показать все комментарии

Нужна помощь советом в какую сторону нужно смотреть.

Реализовал импорт прайс-листа по продуктам указанного производителя. В начале импорта указывается производитель и выбирается Excel-файл прайс-листа этого производителя. В процессе импорта добавляются/обновляются продукты. Считывается строка из Excel-файла, проверяется наличие этого продукта в БД по артикулу и производителю, дальше в зависимости от наличия продукта выполняется либо добавление (если нет), либо обновление (если есть) продукта. Также, во время импорта происходит проверка на дубли по артикулу (коду) продукта, в конце выводиться отчет.

Попробовал дефрагментировать индексы по этому совету. С большим файлом Excel (22411 строк) импорт занял: до - 45 минут, после - 33 минуты.

Задача: максимально ускорить процесс импорта.

Я доработал функционал, чтобы получить статистику сколько сумарно времени занимает выполнение того или иного участка кода/функции, а также какой процент приходиться на этот участок кода/функции от общего времени импорта.

В результате, узкими местами оказались функции GetOffering (10 минут, 29.4 %), CheckHasDuplicate (11.5 минут, 33.6 %), которые выполняют запрос на выборку (Select query) по продукту:
[[fn]GetOffering] TotalDuration - 600573 ms, NumberOfCalls - 22409, MinDuration - 15 ms, MaxDuration - 328 ms, AverageDuration - 26.8 ms, Portion - 29.4 %
[[fn]CheckHasDuplicate] TotalDuration - 684564 ms, NumberOfCalls - 22409, MinDuration - 15 ms, MaxDuration - 328 ms, AverageDuration - 30.55 ms, Portion - 33.6 %

Portion - это процент от общего времени выполнения импорта прайса.

Вот эти запросы:

функции GetOffering

SELECT
        [tbl_Offering].[ID] AS [ID],
        [tbl_ProductCode].[Code] AS [ProductCode]
FROM
        [dbo].[tbl_Offering] AS [tbl_Offering]
LEFT OUTER JOIN
        [dbo].[tbl_ProductCode] AS [tbl_ProductCode] ON [tbl_ProductCode].[ID] = [tbl_Offering].[ProductCodeID]
WHERE([tbl_Offering].[Article] = N'20237-179' AND
        [tbl_Offering].[VendorID] = '{AFF31DDE-20C5-4207-AD54-275962A4D7F8}')

Execution plan
execution plan

функции CheckHasDuplicate

SELECT
        [tbl_Offering].[ID] AS [ID],
        [tbl_Offering].[OriginalName] AS [OriginalName],
        [tbl_Offering].[VendorID] AS [VendorID],
        [Vendor].[Name] AS [VendorName],
        [tbl_ProductCode].[Code] AS [ProductCode],
        [tbl_Offering].[Article] AS [Article]
FROM
        [dbo].[tbl_Offering] AS [tbl_Offering]
LEFT OUTER JOIN
        [dbo].[tbl_Account] AS [Vendor] ON [Vendor].[ID] = [tbl_Offering].[VendorID]
LEFT OUTER JOIN
        [dbo].[tbl_ProductCode] AS [tbl_ProductCode] ON [tbl_ProductCode].[ID] = [tbl_Offering].[ProductCodeID]
WHERE([tbl_Offering].[Article] = N'PCM-3730I-AE')

Execution plan
execution plan

Большие картинки в прикрепленном архиве execution_plan.rar.

Смотрю в сторону индексов. В таблице tbl_Offering 152773 записи. С индексами раньше особо не работал. Возможно, стоит добавить некластерный индекс по полю Article, по которому происходит фильтрация продуктов? Может, еще что-то посоветуете? Нужно ли запускать какую-то регулярную обработку индексов, чтобы их оптимизировать?

Вот SQL-код создания таблицы tbl_Offering:

/****** Object:  Table [dbo].[tbl_Offering]    Script Date: 05/14/2013 15:05:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl_Offering](
        [ID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [PDFOfferingID]  DEFAULT (newid()),
        [CreatedOn] [datetime] NULL,
        [CreatedByID] [uniqueidentifier] NULL,
        [ModifiedOn] [datetime] NULL,
        [ModifiedByID] [uniqueidentifier] NULL,
        [Name] [nvarchar](250) NOT NULL,
        [Code] [nvarchar](250) NULL,
        [CurrencyID] [uniqueidentifier] NULL,
        [BasicPrice] [decimal](15, 2) NULL,
        [DefaultUnitID] [uniqueidentifier] NULL,
        [VendorID] [uniqueidentifier] NULL,
        [SupplierID] [uniqueidentifier] NULL,
        [OwnerID] [uniqueidentifier] NULL,
        [OfferingTypeID] [uniqueidentifier] NULL,
        [URL] [nvarchar](250) NULL,
        [Description] [image] NULL,
        [Weight] [decimal](15, 4) NULL,
        [Volume] [decimal](15, 4) NULL,
        [SerialNumber] [nvarchar](50) NULL,
        [OriginalCountryID] [uniqueidentifier] NULL,
        [UnitDivision] [decimal](15, 4) NULL,
        [IsUsed] [int] NULL,
        [ProductCodeID] [uniqueidentifier] NULL,
        [GuaranteePeriod] [decimal](15, 4) NULL,
        [QuantityInPackage] [decimal](15, 4) NULL,
        [MinRest] [decimal](15, 4) NULL,
        [StatusID] [uniqueidentifier] NULL,
        [OriginalName] [nvarchar](250) NULL,
        [DeliveryTerm] [decimal](15, 4) NULL,
        [Price1FOB] [decimal](15, 4) NULL,
        [Price1DDP] [decimal](15, 4) NULL,
        [VendorCurrencyID] [uniqueidentifier] NULL,
        [SupplierCurrencyID] [uniqueidentifier] NULL,
        [VendorSupplierConvRateID] [nvarchar](250) NULL,
        [DeliveryBasisID] [nvarchar](250) NULL,
        [SupplierMarkup] [decimal](15, 4) NULL,
        [SupplierExtraCostsForUkraine] [decimal](15, 4) NULL,
        [EndUserPriceFOB] [decimal](15, 4) NULL,
        [EndUserPriceDDP] [decimal](15, 4) NULL,
        [IsSpecialSupplierPrice] [int] NULL,
        [Article] [nvarchar](250) NULL,
        [SupplierConversionRateID] [nvarchar](250) NULL,
        [IsFixedCosts] [int] NULL,
        [FixedCosts] [decimal](15, 4) NULL,
        [SpecialSupplierPrice] [decimal](15, 4) NULL,
        [IsRequiredIncomeControl] [int] NULL,
        [OrderCode] [nvarchar](250) NULL,
        [Note] [nvarchar](1000) NULL,
        [IsUsedInPriceListImport] [int] NULL,
        [CategoryID] [uniqueidentifier] NULL,
        [GnomeID] [nvarchar](250) NULL,
        [IsSeparateLineMarkupInSupplie] [int] NULL,
 CONSTRAINT [POfferingID] PRIMARY KEY NONCLUSTERED
(
        [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FK13238CategoryIDtbl_Offeri1] FOREIGN KEY([CategoryID])
REFERENCES [dbo].[tbl_OfferingCategory] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FK13238CategoryIDtbl_Offeri1]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingCurrencyID] FOREIGN KEY([CurrencyID])
REFERENCES [dbo].[tbl_Currency] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingCurrencyID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingDefaultUnitID] FOREIGN KEY([DefaultUnitID])
REFERENCES [dbo].[tbl_Unit] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingDefaultUnitID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingOfferingTypeID] FOREIGN KEY([OfferingTypeID])
REFERENCES [dbo].[tbl_OfferingType] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingOfferingTypeID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingOriginalCountryID] FOREIGN KEY([OriginalCountryID])
REFERENCES [dbo].[tbl_Country] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingOriginalCountryID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingOwnerID] FOREIGN KEY([OwnerID])
REFERENCES [dbo].[tbl_Contact] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingOwnerID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingProductCodeID] FOREIGN KEY([ProductCodeID])
REFERENCES [dbo].[tbl_ProductCode] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingProductCodeID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingStatusID2] FOREIGN KEY([StatusID])
REFERENCES [dbo].[tbl_OfferingStatus] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingStatusID2]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingSupplierCurrencyID2] FOREIGN KEY([SupplierCurrencyID])
REFERENCES [dbo].[tbl_Currency] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingSupplierCurrencyID2]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingSupplierID] FOREIGN KEY([SupplierID])
REFERENCES [dbo].[tbl_Account] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingSupplierID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingVendorCurrencyID] FOREIGN KEY([VendorCurrencyID])
REFERENCES [dbo].[tbl_Currency] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingVendorCurrencyID]
GO
ALTER TABLE [dbo].[tbl_Offering]  WITH CHECK ADD  CONSTRAINT [FOfferingVendorID] FOREIGN KEY([VendorID])
REFERENCES [dbo].[tbl_Account] ([ID])
GO
ALTER TABLE [dbo].[tbl_Offering] CHECK CONSTRAINT [FOfferingVendorID]

Нравится

4 комментария

Здравствуйте.

Да, Вам точно нужен индекс, т.к. и в GetOffering и в CheckHasDuplicate есть строки вида:
WHERE([tbl_Offering].[Article] = N'20237-179'

Именно здесь мы и получаем "затык"... Осталось определиться нужно ли создавать кластерный индекс?

На самом деле все просто: если у таблицы есть кластерный индекс, то записи, находящиеся в этой таблице, физически (в дисковом файле) упорядочиваются в соответствии с условием индексирования). Именно поэтому кластерный индекс может быть на таблицу только один. Некластерный индекс хранит ссылки на местоположение данных в дисковом файле.

Со всеми вытекающими.

Вытекающие:
1. Скорость доступа к строкам, при указании условия where, совпадающиего с условием индексирования для кластерного индекса, будет выше, чем при поиске записей по простому индексу (не надо высислять абсолютное положение данных из относительного).

2. Если кластерный индекс содержит большое количество часто обновляемых полей, то это отрицательно скажется на производительности, так как приведет к постоянному физическому перупорядочиванию данных.

3. Если кластерный индекс создается по IDENTITY столбцу, и из таблицы часто удаляются записи, то это приводит к сильной фрагментации таблицы.

Также, вот статья о "Идексах". Описано довольно подробно.

Спасибо, Дмитрий.
Подумав, решил попробовать создать некластерный индекс по полю Article, поскольку предполагается частая вставка новых записей (пункт 2 в Ваших вытекующих), и удаление (пункт 3). Сейчас тестирую импорт с некластерным индексом по полю Article, о результатах отпишусь.

Протестировал:
1. Где основное действие - это вставка (Insert) - 15 минут.
2. Где изменение (Update) - 14 минут.

Результаты на лицо :smile:
Спасибо большое за помощь :twisted:

А начиналось все с 1 часа.

Шаги по оптимизации:
1. Вместо использования Dataset.Append(), Dataset.Edit(), Dataset.Post() переделал на использование Insert и Update Query - стало 45 минут.
2. Дефрагментировал индексы - стало 33 минуты.
3. Добавил индекс по полю Article, по которому происходит фильтрация. Индекс по полю VendorID уже был ранее добавлен автоматически, при добавлении поля в сервис таблицы. Стало - 15 минут.

Показать все комментарии

Возникла задача с помощью объекта ADODB.Connection подключиться к базе 1С и выполнить несколько запросов.
Все никак не получалось составить строку подключения к базе, которая работает под MS SQL 2005. Нашел решение вот здесь.

Метод довольно простой. Нужно создать текстовый файлик, поменять у него расширение с txt на udl.
Затем запустить его и у вас откроется следующее окно:
Выбор поставщика данных
В открывшемся окне на вкладке [Поставщик данных] нужно выбрать Microsoft OLE DB Provider for SQL Server.
На вкладке [Подключение] нужно заполнить имя сервера, способ входа на сервер и выбрать базу данных, к которой будет происходить подключение. Например:
Параметры подключения
Чтобы сохранился пароль в настройках, нужно отметить галочку "Разрешить сохранение пароля".

Удобство состоит в том, что сразу же можно проверить подключение с введенными настройками (кнопка [Проверить подключение]).

Чтобы получить итоговую строку подключения нужно сохранить настройки и открыть файл в текстовом редакторе. Вы увидите свою строку подключения. Например:

[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Password=supervisor;Persist Security Info=True;User ID=supervisor;Initial Catalog=TDC;Data Source=TERRASOFT\terrasoft

Нравится

Поделиться

0 комментариев
Показать все комментарии

Написал практически универсальную обработку по переносу справочников Контрагентов и Номенклатуры, а также всех сопутсвующих им из 1С в Террасофт. Посредство ADO соединения с БД террасофт на SQL сервере. В прикрепленных файлах тестовая версия и инструкция к ней.

Нравится

Поделиться

5 комментариев

Здравствуйте! Скажите пожалуйста, каждый раз экспортируются все значения справочников? Можно ли отследить те элементы, которые в 1С были удалены и остались в Террасофт? Планируете дальше писать импорт документов из 1С?

Забыли указать в шапке, для какой версии 1С предназначена утилита. Насколько я понял, утилита работает только с версией 8.1.

1. На данный момент реализована только первоначальная выгрузка данных. Если это будет востребовано то можно написать вообщем то и импорт документов из 1С. Вообще планировал писать экспорт счетов из террасофт и практически закончил но пока остановился.
2. На данный момент обработка работает на версии 8.1 по запросу можно будет конвертнуть под любую 8.х

Не пытались использовать эту утилиту?

"Глова Сергей" написал:

Пытался. А вы пытались ей пользоваться? У меня не получилось нормально все с помощью нее реализовать. Даже если с помощью нее и можно сделать то же самое то написать скриптов придется не меньше а может и больше чем кода в 1С.

Показать все комментарии

В базу изначально вносили название продуктов с расширенной латиницей: Ł, Ż

Сейчас было принято решение не использовать эти символы. Нужно заменить в существующей базе. Сервер MS SQL 2005. Пробовал так:

 UPDATE [tbl_Offering]
SET [Name] = REPLACE([Name],'Ł','L')

Потом так:
 UPDATE [tbl_Offering]
SET [Name] = REPLACE([Name],'Ł' collate polish_bin,'L')

Результат один: замена L на L :sad:
Символ Ł - просто игнорируется! Это такая фича функции REPLACE или нужно как-то по другому это делать?

Буду благодарен за любые комментарии! :biggrin:

Нравится

2 комментария

Виталий, а так?

 UPDATE [tbl_Offering]
SET [Name] = REPLACE([Name],N'Ł',N'L')

Для юникода обязательно ставьте N вначале строковой константы.

Спасибо! Помогло :wink:

PS: Уже нарыл в Интернете об этом....

--
www.it-sfera.com.ua

Показать все комментарии

Установлена системы на новой машине (сервер), поднята база и создан пользователь supervisor с ролью sysadmin. При попытке войти в систему выпадает ошибка с сообщением о том, что пользователь Supervisor не входит в список доверенных подключений SQL. На машине установлен MS SQL 2005, Terrasoft 3.3.1. Подскажите, может кто-нибудь сталкивался с подобной проблемой?

Нравится

4 комментария

случайно не Windows-авторизация на сервере стоит?

ООО "Лайнсервис"
www.ls-crm.ru

По моему, да. Не мной ставился MS SQl.

Если да, то тогда проблема на уровне доступа пользователя Windows под именем Supervisor на комп с SQL-сервером, его туда не пускают.
Поставить можно SQL-сервера авторизацию вместо Windows

ООО "Лайнсервис"
www.ls-crm.ru

"Александр Кудряшов" написал:Поставить можно SQL-сервера авторизацию вместо Windows

А именно смешанный режим аутентификации (Mixed Mode).

В контекстном меню корневого элемента выбрать "Properties" -> "Security" -> Server authentication

Дополнительно рекомендую на клиенте включить протоколы TCP/IP и Named Pipes.
Сделать это можно запустив утилиту "cliconfg".

Terrasoft Support Team

Показать все комментарии

Предоставляю Вашему вниманию подборку ссылку на компоненты и дистрибутивы, необходимые для установки Microsoft® SQL Server® Express 2005:

1. Windows Installer 3.1 Redistributable (v2) - Русский;
2. Microsoft Core XML Services (MSXML) 6.0;
3. Дистрибутивный пакет Microsoft .NET Framework 2.0 (x86);

4. Microsoft SQL Server 2005 Express Edition (SP3);
5. Microsoft SQL Server Management Studio Express (SP3).

Дополнительно хочу заметить, что данные утилиты и дистрибутивы распространяются бесплатно, а ссылки взяты с сайта www.microsoft.com

Нравится

Поделиться

3 комментария

Спасибо, Владимир!
Я думаю, я знаю, что тебя подтолкнуло к создвнию этого материала!

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

О, спасибо и от MTI. Как раз то, что нам нужно. :smile:

"Tamara Strelnikova" написал:О, спасибо и от MTI.

Пожалуйста, пользуйтесь на здоровье :smile:

Показать все комментарии

Есть варианты совместить терминальный сервер для 30-40 пользователей и SQL-сервер. Можно ли это делать? Будет ли работать TSCRM+Outlook в терминальном режиме? Можно ли на этом физическом сервере держать базу SQL, или лучше разнести терминальный сервер и сервер базы на разные машины? Какие технические требования нужны к объединённому серверу (и какие к отдельным серверам)?
И главный вопрос: как померить производительность SQL-сервера?

Нравится

9 комментариев

Добрый день, Евгений!

Совместить терминальный сервер и сервер БД конечно же можно, и никаких ограничений это не накладывает. Но в таком случае сребования к серверу конечно же возрастают.

Я бы все же рекомендовал разделить эти сервера, особенно если с СУБД будут также работать и удаленные, и локальные пользователи. Также это на много лучше выглядит с точки зрения безопасности данных. Очень не рекомендуется располагать БД на сервере, опубликованном в глобальную сеть.

Outlook на сервере также будет работать нормально. Лично я не наблюдал с этим никаких проблем, и о таких проблемах не слышал.

1. Сетевые интеграторы предлагают совместить SQL-сервер и файлопомойку в одном сервере? Это будет правильно?
2. Сколько RAM нужно для терминального сервера из рассчета 25 юзеров?

1. Все будет зависеть от того, сколько физических дисков будет на этом сервере, и какова будет активность пользователей. Такое совмещение сделать можно, но нужно понимать, что если на сервер начнут записывать большой файл, то дисковый накопитель будет загружен, а для СУБД данный ресурс является самым критическим. Исходя из этого могу сказать, что если будете совмещать, то как минимуму все БД должны быть физически на одном накопителе, а все остальные файлы на другом.
2. Не менее 2Гб. Это будет впритык, и скорее всего будет некомфортная работа. Рекомендую не менее 4Гб.

А чем обусловлен шаг в сторону терминала, а не Web сервисов Terrasoft? Они все же менее требовательны к каналу, особенно в последних сборках 3.2.0 и 3.2.1 на этот счет сделано очень многое.

Что такое веб-сервисы? И как их посмотреть/настроить для удаленного использования?
ТС 3.2.0.18

Web сервисы - это возможность работы Terrasoft CRM с БД по протоколу HTTP(S). Полезно в том случае, если БД физически находится в другой сети. Если по простому, то это работа с БД через Internet, но не черех Internet Explorer (или аналогичные браузеры), а в стандартном интерфейсе Terrasoft CRM.

В руководстве администратора подробно описана настройка работы через Web сервисы. Если в процессе настройки у Вас возникнут вопросы по настройке, то служба поддержки сможет ответить на них.

нагуглил сей топик.
Тоже интересует вопрос как оценить производительность сервера. Сейчас база SQL крутится на сервере вместе с другими сервисами. Пользователи жалуются на тормоза Terrasofta. Купили новый сервер, поставил SQL и Demo базу, как можно в цифрах увидеть его производительность? У нас есть конкурентные лицензии, как нашу базу на новом сервере запустить?
Вопрос по версии SQL? сейчас пользуем 2005 Express, там ограничение по оперативной памяти в 1Гб, насколько это мало для нашей базы (2 Гб, 15-20 работающих пользователей)

1 Гб однозначно мало для такой базы. Если пользователи работают активно, необходимо хотя бы 2, а лучше 4 Гб. MS SQL 2005 Express в этом плане не подходит. Кроме того, если у Вас размер базы уже 2 Гб, то в скором времени он Вам не подойдёт и в плане ограничения на размер базы (4 Гб).

Что касается оценки производительности, возьмите за основу какой-нибудь сложный запрос и проверьте время его выполнения на разных серверах и с разным размером оперативной памяти. На основании этих данных можно будет понять, насколько изменилась производительность нового сервера.

Олег. Приведите пример сложного запроса для проверки скорости работы базы?

Евгений, выполнение одного запроса даст очень относительную оценку. Один и тот же запрос будет выполняться разное время даже на одной машине, если его выполнять несколько раз. Для того, чтобы получить полную картину, нужно моделировать различные ситуации (максимальное число подключенных пользователей, среднее число, обычная работа, интенсивная работа), это должно происходить достаточно длительные промежутки времени (несколько часов), и вся работа должна отслеживаться профайлером. Потом на основании информации профайлера делается вывод о том, справляется ли сервер с такой нагрузкой.

Показать все комментарии