none
Пропавшее место на одном из сайтов RRS feed

  • Вопрос

  • Добрый день!

    Возникла странная проблема с Sharepoint 2013. Стоит SP1 и ноябрьский CU.

    На один из подсайтов в тестовых целях был загружен большой файл (ок. 900 МБ), а затем удален, при чем и из обоих корзин тоже.

    В Метриках хранилища уже месяц наблюдаю странную ситуацию:

    1. Сайт IT занимает 900+ МБ

    https://www.dropbox.com/s/r2tt3iqo6hatt8b/2015-02-17_170437.jpg?dl=0

    2. Библиотека Документы в нем занимает так же 900+ МБ:

    https://www.dropbox.com/s/sflhllhhbsija6z/2015-02-17_170507.jpg?dl=0

    3. Но внутри самой библиотеки, естественно, файла нет, т.к. он был удален.

    https://www.dropbox.com/s/akatnv57ymhj85z/2015-02-17_170538.png?dl=0

    Таким образом, место куда-то пропало, но Sharepoint откуда-то его берет. Корзину для семейства веб-сайтов сегодня отключил, результата никакого.

    Задание обработки метрик хранилища успешно отрабатывает каждые 5 мин.

    Просьба подсказать куда копать в таком случае.

    17 февраля 2015 г. 14:22

Ответы

  • Если это случилось однократно, то возможно что-то в базе сохранилось.
    В любом случае, если у вас сейчас выводится неправильный размер в Storage Metrics,
    то как-то оно считается. Я пробежался по коду страницы в ILSpy (класс StorageMetricsPage), 
    там ничего хитрого нет. В конце вызывается метод  GetStorageMetrics из неуправляемой сборки, а он уже скорее всего, делает запрос в базу (вызов процедуры proc_GetStorageMetric).  Timer Job периодически вычисляет размер вызывая процедуку proc_RecalculateStorageMetricsForSite. 
    Я не смотрел их, но думаю, что если для вас этот вопрос очень критичен, то можете кого-нибудь напрячь, чтобы прям в debugger пробежаться по всем подсчётам. 

    [custom.development]

    26 февраля 2015 г. 7:03

Все ответы

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

    Innovation distinguishes between a leader and a follower - Steve Jobs

    17 февраля 2015 г. 14:29
  • Пробовал сжимать файлы базы банных, высвобождая свободное место и наращивать обратно до некоторого размера. Эффекта от действий не заметил. 

    Но сейчас на всякий случаю попробую еще раз. 

    17 февраля 2015 г. 14:31
  • Стандартное удаление и восстановление файлов http://redmondmag.com/articles/2014/11/06/sharepoint-2013-recycle-bin.aspx 

    Возможно будет интересна статья, как удалять файлы в SharePoint с помощью PowerShell http://redmondmag.com/articles/2014/11/06/sharepoint-2013-recycle-bin.aspx


    Облачные технологии Microsoft Azure

    17 февраля 2015 г. 15:18
  • Корзина для семейства сайтов в данный момент отключена. 

    Проверил обе - в данный момент и там, и там пусто.

    18 февраля 2015 г. 5:52
  • Добрый день.

    возможно уже делали, но уточню, корзину второго уровня семейства чистили?

    18 февраля 2015 г. 7:32
    Модератор
  • Да, чистили.
    19 февраля 2015 г. 8:43
  • я бы проверил базу

    первое получаем ID сайта

    SELECT [Id]
          ,[SiteId]
          ,[FullUrl]
          ,[Title]
      FROM [название].[dbo].[AllWebs] --меняем название базы
      where Title = N'название' -- меняем название сайта

    копируем 

    SiteId

    второе получаем сортированный по размеру список элементов

    SELECT  [Id]
          ,[SiteId]
          ,[DirName]
          ,[LeafName]
          ,[Level]
          ,[WebId]
          ,[ListId]
          ,[DoclibRowId]
          ,[Size]     
      FROM [название].[dbo].[AllDocs] -- меняем название базы
      where WebId = 'id сайта' ---and ListId = '98050A59-4158-40C4-A1B5-C49B5D2102CB'
      Order by Size Desc

    при желании можно еще поставить фильтр по списку, что бы меньше элементов вернул

    в колонке "LeafName" содержится название документа



    19 февраля 2015 г. 10:39
    Модератор
  • Спасибо! 

    Попробовал. В первом случае наверное нужно копировать Id, т.к. он соответствует WebId из dbo.AllDocs.

    Так или иначе, в итоговой выборке потерянного файла на 900 МБ нет. Откуда тогда Sharepoint берет это?

    20 февраля 2015 г. 10:00
  • Проведите тест с таблицей dbo.StorageMetrics

    SELECT SUM ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'

    Можно поискать самый большой файл

    SELECT MAX ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'

    Попробуйте ещё раз добавить файл, скажем на 600mb. Посмотрите, как изменится показатель размера подсайта. Удалите этот файл (включая корзины).  Запустите вышенаписанные скрипты, посмотрите, что изменится. 
    p.s. после добавления/удаления таблица StorageMetrics обновляется достаточно оперативно (секунд 10, но после удаления из корзины сайта, у меня где-то через минуту она обновилась).


    [custom.development]

    20 февраля 2015 г. 10:49
  • Проведите тест с таблицей dbo.StorageMetrics

    SELECT SUM ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'

    Можно поискать самый большой файл

    SELECT MAX ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'

    Попробуйте ещё раз добавить файл, скажем на 600mb. Посмотрите, как изменится показатель размера подсайта. Удалите этот файл (включая корзины).  Запустите вышенаписанные скрипты, посмотрите, что изменится. 
    p.s. после добавления/удаления таблица StorageMetrics обновляется достаточно оперативно (секунд 10, но после удаления из корзины сайта, у меня где-то через минуту она обновилась).


    [custom.development]

    Вариант с таблицами попробую, спасибо.

    По поводу новых файлов - пробовал добавлять/удалять, все проходит корректно.
    Метрики хранилища все отображают верно. 
    Конкретно что в табличке из вашего кода попробую как будет возможность. Спасибо.

    24 февраля 2015 г. 13:55
  • Проведите тест с таблицей dbo.StorageMetrics

    SELECT SUM ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'

    Можно поискать самый большой файл

    SELECT MAX ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'

    Попробуйте ещё раз добавить файл, скажем на 600mb. Посмотрите, как изменится показатель размера подсайта. Удалите этот файл (включая корзины).  Запустите вышенаписанные скрипты, посмотрите, что изменится. 
    p.s. после добавления/удаления таблица StorageMetrics обновляется достаточно оперативно (секунд 10, но после удаления из корзины сайта, у меня где-то через минуту она обновилась).


    [custom.development]

    Провел вышеуказанные манипуляции.

    Изначально первый скрипт возвращал сумму:
    8 998 790 909

    После добавления файла на 43,5 МБ (45 623 439) размер стал
    9 044 414 656 - все корректно

    После полного удаления данного файла, в т.ч. из всех корзин, размер вернулся на отметку
    8 998 852 494

    Т.е. считаю, что в данном случае все отработало корректно

    25 февраля 2015 г. 7:40
  • А какой самый большой файл нашёл скрипт? Вашего файла на 900 мб нет?

    SELECT MAX ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'



    [custom.development]

    25 февраля 2015 г. 7:54
  • А какой самый большой файл нашёл скрипт? Вашего файла на 900 мб нет?

    SELECT MAX ([TotalSize])
      FROM [WSS_Content].[dbo].[StorageMetrics]
      where SiteId = 'ТУТ-GUID-КОЛЛЕКЦИИ-САЙТОВ'



    [custom.development]

    Самый большой по результатам данного скрипта
    1 558 947 614

    А если сделать выборку из [dbo].[StorageMetrics], то находятся еще файлы: 959 983 377 и 957 896 288, что близко к искомому размеру, вот только откуда они берутся - не понимаю. Выборка из таблицы [dbo].[AllDocs] возвращает максимальный размер документа в 13Мб
    25 февраля 2015 г. 8:34
  • Возьмите DocId этих двух файлов из StorageMetrics и поищите их в AllDocs:

    SELECT TOP 1000 [Id]
          ,[SiteId]
          ,[DirName]
          ,[LeafName]
      FROM [WSS_Content].[dbo].[AllDocs] where Id = 'DocID_Файла_На_900МБ_ИЗ_StorageMetrics'


    [custom.development]

    25 февраля 2015 г. 9:06
  • Возьмите DocId этих двух файлов из StorageMetrics и поищите их в AllDocs:

    SELECT TOP 1000 [Id]
          ,[SiteId]
          ,[DirName]
          ,[LeafName]
      FROM [WSS_Content].[dbo].[AllDocs] where Id = 'DocID_Файла_На_900МБ_ИЗ_StorageMetrics'


    [custom.development]

    Просмотрел 3 самых больших файла в [AllDocs] по Id из [StorageMetrics]. 
    У всех значение поля Size - NULL

    В [AllDocs] имеются и другие документы со значением NULL в поле Size

    25 февраля 2015 г. 13:01
  • А в столбцах DirName, LeafName что?
    Скорее всего это элементы обозначающие подсайт, список, библиотеку.
    В AllDocs не только элементы/файлы хранятся.
    Кстати, сами бинарники файлов в таблице - DocStreams (там есть колонки DocId и Size).

    [custom.development]

    25 февраля 2015 г. 13:09
  • А в столбцах DirName, LeafName что?
    Скорее всего это элементы обозначающие подсайт, список, библиотеку.
    В AllDocs не только элементы/файлы хранятся.
    Кстати, сами бинарники файлов в таблице - DocStreams (там есть колонки DocId и Size).

    [custom.development]

    В одной записи в DirName и LeafName как раз та библиотека, в которой был потерянный файл

    В DocStreams больших файлов не обнаружил

    • Изменено MorgenRu 25 февраля 2015 г. 13:26
    25 февраля 2015 г. 13:26
  • Я попробовал повторить вашу проблему, но у меня так и не получилось.
    Правильно ли понимаю, что у вас эта проблема так же больше не повторяется? 




    [custom.development]

    25 февраля 2015 г. 13:48
  • Я попробовал повторить вашу проблему, но у меня так и не получилось.
    Правильно ли понимаю, что у вас эта проблема так же больше не повторяется? 




    [custom.development]

    Нет, не повторяется. Этот случай с файлом на ~900МБ - единственный.
    25 февраля 2015 г. 14:03
  • Ещё можно пробежаться по stored procedures: proc_GetStorageMetric и proc_RecalculateStorageMetricsForSite
    Там вся логика вычисления.

    [custom.development]


    25 февраля 2015 г. 15:06
  • Ещё можно пробежаться по stored procedures: proc_GetStorageMetric и proc_RecalculateStorageMetricsForSite
    Там вся логика вычисления.

    [custom.development]


    К сожалению, здесь моя область знаний уже кончается.
    Т.е. по-вашему, проблема все же не в каких-то ошибках в базе?
    26 февраля 2015 г. 5:57
  • Если это случилось однократно, то возможно что-то в базе сохранилось.
    В любом случае, если у вас сейчас выводится неправильный размер в Storage Metrics,
    то как-то оно считается. Я пробежался по коду страницы в ILSpy (класс StorageMetricsPage), 
    там ничего хитрого нет. В конце вызывается метод  GetStorageMetrics из неуправляемой сборки, а он уже скорее всего, делает запрос в базу (вызов процедуры proc_GetStorageMetric).  Timer Job периодически вычисляет размер вызывая процедуку proc_RecalculateStorageMetricsForSite. 
    Я не смотрел их, но думаю, что если для вас этот вопрос очень критичен, то можете кого-нибудь напрячь, чтобы прям в debugger пробежаться по всем подсчётам. 

    [custom.development]

    26 февраля 2015 г. 7:03
  • Хорошо. 
    Большое спасибо!
    26 февраля 2015 г. 7:58